dědění uživatelských rolí
- sin
- Člen | 82
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
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
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
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)
- David Grudl
- Nette Core | 8218
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.