isInRole – vracet true i při dotazu na předka

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

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
+
0
-

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…

sin
Člen | 82
+
0
-

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…

David Grudl
Nette Core | 8218
+
0
-

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
+
0
-

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).