dědění uživatelských rolí

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
sin
Člen | 82
+
0
-

Ahoj,
potřebuju vypisovat články určené vždy pro konkretní uživatelskou roli. Ale většina rolí je potomkem nějaké jiné. Tzn host→ uživatel → člen → moderator → admin. A potřebuju abych vypsal vždy clanky pro danou kategorii a všechny od kterých děďil …

V tabulce clanku mam jenom napsano třeba 3 coz je id role člen a potrebuju aby se to vypsalo i kdyz bude role moderator nebo admin.

Napadlo me si v identite uchovavat id vsech parent rolí ale to mi prijde divné resení…

Co Vám příjde jako nejlepší řešení?

Ondřej Mirtes
Člen | 1536
+
0
-

Pokud má role člen někam přístup a moderátor dědí od členu, tak když tam nemá vysloveně přístup zakázán, tak bude automaticky povolen. To je podstata dědění rolí :)

Pokud ti to takto nefunguje, tak to znamená, že se třídou Permission pracuješ nějak jinak, než máš :)

Editoval Ondřej Mirtes (20. 1. 2010 12:04)

sin
Člen | 82
+
0
-

Dělal jsem to podle ukazek tady na foru. Identitu mam (username role vse_ostatni) ale role jak ji tady davam je vzdy jen ta jeho role a ne jeho predci.. a co se tyce acl tak to mam uplne presne podle dynamicke spravy roli… ale kdyz jsem si zkousel dal Environment::getUser()->isInRole(„guest“) tak mi to vraci false… a nevim kde je teda chyba…

Ondřej Mirtes
Člen | 1536
+
0
-

http://zdrojak.root.cz/…neni-a-role/

Při definování pole říkáš, jaký je její předek:

$acl->addRole('administrator', 'member');  // administrator je potomkem member

Metoda $user->isInRole() vrací true jen v případě na dotaz přímo té role, kterou vracíš v Identity. Je to možná neintuitivní (pošlu feature request), ale nevadí to, protože autorizovat uživatele k akcím bys měl takto:

Doporučuji se na oprávnění k akcím dotazovat pouze a jen přes $user->isAllowed($resource, $privilege) – pokud by ses dotazoval jen přes příslušnost k nějaké roli, tak pak celá tabulka ACL (přidělení oprávnění) postrádá význam. Pokud se po nějaké době rozhodneš, že nějaká role by měla dostat oprávnění na nějakou akci, tak bys u tvého způsobu musel editovat zdrojáky, při kontrole na zdroj a privilege jen updatuješ definici pravidel a do zdrojáků nemusíš zasahovat, což je účel :)

Editoval Ondřej Mirtes (20. 1. 2010 12:47)

sin
Člen | 82
+
0
-

Jasny, nejak jsem si to zkratoval v hlave a misto na resources jsem to navazal na roles… predelam si to… Díky

David Grudl
Nette Core | 8155
+
0
-

K ověření oprávnění je potřeba používat dotaz $user->isAllowed(), protože dědění rolí je pouze interním nástrojem třídy Permission sloužícím k popisu pravidel. Tj. neplatí, že každý potomek vždy dědí všechna oprávnění. Tudíž kdyby isInRole() bralo v potaz i rodičovské role, vedlo by to ke špatnému chování aplikace.