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 >
