OT: Agenda přístupových práv
jan.slusek na seznam.cz
jan.slusek na seznam.cz
Středa Srpen 5 09:10:31 CEST 2009
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