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
