Re: OT: Agenda přístupových práv

Roman Pichlík roman.pichlik na gmail.com
Středa Srpen 5 13:13:31 CEST 2009


Podle me mate tri moznosti:

- zkuste to bez predpocitani, vytvorte si nejaky reprezentativni
vzorek dat a na nem udelejte vykonostni test
- pouzijte predpocitani, dle meho nazoru zmena tech ACL pripadne
nejakych roli nemusi byt tak casta
- uplne se na to vykaslete pri vypisovani seznamu zaznamu, proste bude
listovat vsechny a pro ty, ktere nema pravo nepovolite danou akci. V
podstate udelate vzdy dotaz jestli ma clovek opravneni na to s danym
zaznamem pracovat. Da se to udelat i batchove jednim dotazem pro
nactenou stanku.

2009/8/5  <jan.slusek na seznam.cz>:
> 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
>



-- 
S pozdravem Roman "Dagi" Pichlik

/* http://www.sweb.cz/pichlik/ Blog pro kodery */



Další informace o konferenci Konference