Dědění práv a neočekávané chování allow/deny

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

Zdravím,
používám klasickou Permission třídu v Nette. Nastavuju oprávnění přes php potomka ala

parent::addRole('ma_povoleno');
parent::addRole('nema_povoleno', 'ma_povoleno');

parent::addResource('Resrc');

parent::allow('nema_povoleno', self::ALL, self::ALL);
parent::allow('ma_povoleno', self::ALL, self::ALL);

parent::deny('nema_povoleno', 'Resrc', 'action1');
parent::allow('ma_povoleno', 'Resrc', 'action1');

Pokud má uživatel roli pouze nema_povoleno, tak je vše ok. Pokud má ale obě role (ma_povoleno, nema_povoleno) tak

$user->isAllowed('Resrc', 'action1');

vrací TRUE.

Nevíte co by mohlo na to mít vliv?
Potřebuju, aby když bude mít uživatel roli nema_povoleno tak se vrátilo false.

Nápady, kritika?

edit: pořádí v autorizátoru ani rolí uživatele nehraje roli

Editoval CZechBoY (27. 11. 2015 22:07)

enumag
Člen | 2118
+
+1
-

Pokud se nemýlím tak stačí aby libovolná role uživatele měla danou resource/permission povolenou. V tvém případě když má obě role tak se tam dostane protože role ma_povoleno má allow.

Pokud má jen roli nema_povoleno tak tahle role zdědí práva od ma_povoleno, ale tuto danou resource/permission jsi explicitně zakázal.

V obou případech se to tedy chová korektně.

Editoval enumag (27. 11. 2015 23:17)

F.Vesely
Člen | 369
+
0
-

Je to presne tak, jak pise enumag viz api tu

CZechBoY
Člen | 3608
+
0
-

Takže řešení je odebrat roli nema_povoleno uživateli.

To by,snad neměl být problem, navíc jsem potom zjistit, že obě role by uživatel fakt neměl mít :D

Diky moc za pomoc.