RE: Agenda prístupových práv

jan.slusek na seznam.cz jan.slusek na seznam.cz
Čtvrtek Srpen 6 11:41:51 CEST 2009


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 <Kamil.Podlesak na ips-ag.net>
> 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: konference-bounces na java.cz 
> > [mailto:konference-bounces na java.cz]On Behalf Of jan.slusek na seznam.cz
> > Sent: Wednesday, August 05, 2009 9:11 AM
> > To: konference na java.cz
> > 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
> > 
> 
> 
> 



Další informace o konferenci Konference