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

Odpovedet emailem