Díky za reakce. Taky jsem dospěl k názoru, že to předpočítávání bude v rámci 
možností nejoptimálnější. Jen teď ještě uvažuji nad dvěma věcmi.
1) Zda.li bude lepší mít jednu centrální tabulku do které se budou zapisovat 
předpočítaná práva objektů všech tříd i uživatelů, nebo pro každou třídu 
(tabulku) mít i separátní tabulku předpočítaných práv, či dokonce ty 
předpočítaná práva ukládat do stejné tabulky  jako vlastní data záznamu (to ale 
asi ne). Analyticky to směřuje k jedné třídě a mapovací tabulce pro všechny 
entity, ale záznamů přes všechny  třídy a uživatele bude velké množství, řádově 
miliony, tak to spíš s ohledem na výkon vidím na separátní tabulky pro každou 
entitu.
2) Pro které uživatele předpočítávat. Vzhledem k tomu, že jich může být 
zavedeno stovky (ne-li tisíce), ale jen část bude aplikaci využívat souběžně, 
zatím preferuji předpočítávat jen těm uživatelům, kteří byli v nějakém timeoutu 
přihlášení, aby se zbytečně databáze neplnila právy uživatelů, kteří do ni 
vlezou jednou za měsíc a to ještě jen na některé moduly. V praxi to ale bude 
mít za následek, že po přihlášení uživatele, který déle v systému nebyl,  bude 
muset čekat až se mu předpočítají práva modulu do kterého chce zrovna vstoupit. 
Asi to ale bude přece jen menší zlo než držet v každém okamžiku pořád 
aktualizovanou kombinaci práv všech tříd, záznamů a uživatelů.



> ------------ Původní zpráva ------------
> Od: Podlesak Kamil <[email protected]>
> Předmět: RE: Agenda prístupových práv
> Datum: 06.8.2009 10:49:26
> ----------------------------------------
> Zdravím,
>
>  Předpočítat. Nic lepšího jsme nevymysleli a ani jsem nikde nic lepšího
> neviděl.
>  Výkonostně to zas takový problém nebývá, pokud se při typickém provozu jen
> vytvářejí/mění záznamy po jednom. Nejhorší je změna rolí uživatele, to se musí
> pro něj předpočítat všechna data, ale to se naštěstí zas tak často neděje.
>
>  Jediné sofistikovanější řešení mě napadá, pokud by ten systém počitání práv
> nebyl zcela obecný, ale šlo by ho definovat jako nějakou algebru ve které by 
> se
> pravidla zapisovala. Pak by šlo z těch pravidel vygenerovat nejenom kdo má 
> jaká
> práva na co, ale také jak se která změna projeví a na čem - tím by se ušetřilo
> spousta času a výkonu zbytečně stráveného přepočítání práv pro objekty, na 
> která
> se ve skutečnosti práva nezměnila.
>
> Kamil Podlešák
>
> > -----Original Message-----
> > From: [email protected]
> > [mailto:[email protected]]on Behalf Of [email protected]
> > Sent: Wednesday, August 05, 2009 9:11 AM
> > To: [email protected]
> > Subject: OT: Agenda prístupových práv
> >
> >
> > Ahoj,
> >
> > vyvíjíme standartní obchodní evidenční systém s trochu
> > sofistikovanější agendou přístupových práv, ktará je
> > postavena na přístupových rolích uživatelů a vztahů těchto
> > rolí k jednotlivým entitním objektům (uloženým záznamům v db)
> > systému. Oprávnění na každou operaci (CRUD) na daném objektu
> > se vyhodnocují podle složitých pravidel závislých na
> > hodnotách jejích atributů a jejich vztahu k rolím přiděleným
> > danému uživateli. Navíc se role mohou různě sčítat apod,
> > zkrátka pravidla a algoritmy pro vyhodnocení povolení operace
> > nad daným záznamem pro konkrétního uživatele jsou dost
> > složitá. Analyticky máme celý systém vytvořen, ten
> > zjednodušeně pro každý záznam  vyhodnotí přístupová práva pro
> > daného uživatele a případně povolí nebo zamítne požadovanou
> > operaci. Nastává však problém v návrhové rovině, např. při
> > generování seznamů. Pokud bude chtít uživatel zobrazit
> > stránkovatelný seznam všech záznamů, musí se mu samozřejmě
> > zobrazit jen ty, u kterých má právo čtení. Nedokážu si z
> > výkonostního hlediska představit, že pro každý uložený
> > záznam, kterých můžou být  i miliony, budu až při generování
> > seznamu ověřovat, zda jej má užvatel právo zobrazit nebo ne,
> > pro každý záznam by se pak spouštěly složité algoritmy pro
> > ověření práv a pokud by měl ve finále uživatel právo třeba na
> > méně záznamů než kolik je zobrazovaných záznamů na stránku
> > musely by se projít třeba i všechny záznamy. Zatím se jako
> > jedno z řešení jeví, předpočítávat si konečná oprávnění pro
> > danou operaci, uživatele a záznam někde na pozadí, ukládat si
> > je do nějaké pomocné tabulky a při generování seznamu prostě
> > jen tuto tabulku připojit. Toto ale zase vyvolává problém s
> > aktualizacemi těchto pomocných tabulek, pokud se v runtime
> > stane něco co by mohlo mít vliv na konečná oprávnění (např.
> > změna rolí uživatelů, pravidel vyhodnocenování apod), budou
> > se muset celé aktualizovat, což při celkovém počtu entit 
> > systému X (stovky) počet záznamů každé enity (statisíce) X
> > počet uživatelů (tisíce)  bude opět znamenat výkonostní
> > problém. Myslím, že tady už určitě někdo řešil něco
> > podobného, proto bych byl vděčen za jakékoliv poznatky jak to
> > třeba řešíte vy.
> >
> > Díky
> >
>
>
>

Odpovedet emailem