isInRole – vracet true i při dotazu na předka
- Ondřej Mirtes
- Člen | 1536
Ahoj,
minimální reprodukční kód:
$acl->addRole('registered', 'guest'); // administrator je potomkem member
return new Identity(1, 'registered');
$user->isInRole('guest'); //vrací false
Nebylo by lepší, kdyby ta metoda brala vpotaz i předky?
Narazil na to programátor v tomto vlákně. Sice zabudované ACL nepoužíval tak, jak se zamýšlelo, ale stejně by se to mělo chovat líp.
- Petr Motejlek
- Člen | 293
To právě záleží na tom, jak ty role bereš. Obecně jsou takové dva přístupy: bůh – administrátor – uživatel – host (tzn. každá vyšší role je svůj předek a něco navíc) a přístup, kdy každá role jako by něco znamenala – takový systém obvykle umožňuje, aby jeden člověk měl více rolí (někdy se místo rolí mluví o právech, a pak se vytvářejí role se jmény jako skladník, finanční ředitel, účetní, mzdová účetní, …), typicky bych asi řekl: čtení faktur, zápis faktur, čtení příjemek, zápis příjemek, čtení mezd, zápis mezd, … Ten druhej systém je novější a sedí víc na podnikové informační systémy, protože právě v podniku se obvykle stává, že každý uživatel má několik práv, která nejsou úplně v hierarchii…
- David Grudl
- Nette Core | 8218
To by nebylo vhodné, 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í. Takže
$user->isAllowed()
by mohlo vracet jiné odpovědi než test na
isInRole()
.
- Petr Motejlek
- Člen | 293
sin napsal(a):
Ale tak to je jedno jak to beru ne? Kdyz budu pouzivat to dedění tak mi to vrati i predky a pokud to budu mit jako ucetni, uklizecka, atd tak mi to vrati jenom tu danou roli… Tohle by akorat rozsirilo ten prvni pristup jestli to dobře chápu…
Je videt, ze jsem to spatne napsal :). To, co pouzivas, nejsou role, ale pojmenovani osob, ktere maji pridelene nektere role :). Na tom ale nezalezi, ja jsem zatim tohle z Nette nepouzil, tak neznam uplne presne tu implementaci. Aby fungovalo oboji, staci, aby byla podpora pro obe situace, tzn. vytvarim novou roli, tak si reknu, jestli od nejake jine ma dedit, nebo ne (predpokladam, ze jelikoz vzniklo tohle tema, zatim se neda rict, od ceho dedim).