ACL více rolí, problematické dědění rolí

Aleksandr
Člen | 14
+
0
-

Dobrý den,
mám takový problém s rolemi, mám role v rámci aplikace nastavené v configu(common.neon):

GUEST(nepřihlášen)
CUSTOMER(dědí od GUESTA)
EDITOR(dědí od CUSTOMER)
OWNER(dědí od EDITOR)
SUPERUSER(dědí od OWNER)

hierarchicky v JSON datech, které decodnu to vypadá takhle:

name=>"Aleksandr"
superUser=>true/false //je SUPERUSER, tedy nejvyšší oprávnění, které přebíjí zbytek oprávnění v subjects
subjects=>([
	array(displayName=>"Název firmy1",role=>"EDITOR",ident_number=>12345678),
	array(displayName=>"Název firmy 2",role=>"OWNER",ident_number=>87654321)
])

může to znamenat, že bych měl uživatele co jsou a nejsou superUseři a mají a nemají firmy ve kterých můžou mít různe role.

Jak by se podle vás nejvhodněji tenhle problém řešil a hlídal pro jednotlivé akce a zda to vůbec jde?

David Matějka
Moderator | 6445
+
0
-

Ahoj, před pár lety jsem měl na toto téma talk na posobotě

na githubu je poslední implementace, bohužel k tomu není docka, tak se kdyžtak ptej. (v tvém případě bys měl „SubjectScope“, který by vracelo role té identity pro daný subject)

edit:

jo a tady je ještě example repo s použitím v projektu (jen teda nepoužívá tu knihovnu, ale má vlastni, zjednodušenou implementaci)

Aleksandr
Člen | 14
+
+1
-

Aleksandr napsal(a):

Dobrý den,
mám takový problém s rolemi, mám role v rámci aplikace nastavené v configu(common.neon):

GUEST(nepřihlášen)
CUSTOMER(dědí od GUESTA)
EDITOR(dědí od CUSTOMER)
OWNER(dědí od EDITOR)
SUPERUSER(dědí od OWNER)

hierarchicky v JSON datech, které decodnu to vypadá takhle:

name=>"Aleksandr"
superUser=>true/false //je SUPERUSER, tedy nejvyšší oprávnění, které přebíjí zbytek oprávnění v subjects
subjects=>([
	array(displayName=>"Název firmy1",role=>"EDITOR",ident_number=>12345678),
	array(displayName=>"Název firmy 2",role=>"OWNER",ident_number=>87654321)
])

může to znamenat, že bych měl uživatele co jsou a nejsou superUseři a mají a nemají firmy ve kterých můžou mít různe role.

Jak by se podle vás nejvhodněji tenhle problém řešil a hlídal pro jednotlivé akce a zda to vůbec jde?

Mě napadlo, že bych vybral nejvyšší roli a s ní pracoval v rámci celé aplikace. Případně bych doplňkově kontroloval ify v rámci nějakých detailů, kde by se role mohli mísit…

piskotek
Člen | 35
+
0
-

Ahoj,
budu teď řešit stejný problém jako je tento. Posunulo se to už někam nebo je pořád rozumné využít řešení od Davida Matějky?

Díky

Ozzrel
Generous Backer | 54
+
+1
-

V UserManageru mám přidaný explode a v DB role odděluji čárkou

return new Nette\Security\SimpleIdentity($row[self::COLUMN_ID], explode(',',$row[self::COLUMN_ROLE]), $arr);