Zdravím,
my jsme tyto problémy obvykle řešili tak, že jsem pravidla pro výpis
měli současně zakódované i pro SQL dotazy. Obvykle totiž výpisová
pravidla byla výrazně jednodušší než
pro editaci nebo detail.
Nicméně to vždy znamenalo duplicitní pravidla. Do určité složitosti to jde.
Petr
Roman Pichlík napsal(a):
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 <[email protected]>:
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
--
Petr Ferschmann
--
SoftEU s.r.o.
Lochotínská 18, 301 00 Plzeň, Česká republika
Phone: +420 371 124 300, +420 371 124 384
E-mail: [email protected] http://www.softeu.com/
begin:vcard
fn:Petr Ferschmann
n:Ferschmann;Petr
org:SoftEU s.r.o.
adr;quoted-printable;quoted-printable;quoted-printable;quoted-printable:;;Lochot=C3=ADnsk=C3=A1 18;Plze=C5=88;Plze=C5=88sk=C3=BD;301 00;=C4=8Cesk=C3=A1 Republika
email;internet:[email protected]
tel;work:+420 377 124 340
tel;cell:+420 377 124 384
x-mozilla-html:TRUE
url:www.softeu.com
version:2.1
end:vcard