Správný způsob implementace několika presenterů, které vyžadují konkrétní uživatelskou roli

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

Ahoj,

chtěl bych napsat aplikaci se dvěma uživatelskými rolemi, to co teď řeším je, jak zařídit, aby presentery vždy vyžadovali tu konkrétní potřebnou roli a nebylo to potřeba do každého z nich psát. Vymyslel jsem toto řešení:
napíšu AbstractAdminPresenter …, který roli porovná v metodě startup() a pokud nebude vyhovovat, přesměruje uživatele na presenter pro přihlášení, kde zároveň zobrazí hlášku, že nemá dostatečný oprávnění.

Je toto správný přístup ?

Díky za cenné rady.

Honza Marek
Člen | 1664
+
0
-

ale docela jo

teď ta cenná rada: prozkoumej příklady v distribuci, něco takového je tam taky řešeno.

triak
Člen | 3
+
0
-

Honza Marek napsal(a):

ale docela jo

díky za schválení :-) jdu na to.

Ondřej Mirtes
Člen | 1536
+
0
-

Já bych ve startupu nekontroloval roli, ale oprávnění $user->isAllowed() na konkrétní resource a privilege, které chceš vykonat. Pokud se dotazuješ na roli, obcházíš tím vlastně celé ACL a kontroluješ jen nějakou vlastnost uživatele. Pokud bys chtěl pak tu danou akci povolit nějaké další roli, musíš sahat do nepatřičných zdrojáků, kdežto pokud kontroluješ, jestli daný uživatel má povolený přístup k danému resource/privilege, tak pro úpravu stačí sáhnout do místa, kde ta pravidla nastavuješ (což může být třeba nějaká posloupnout $permission->allow() v bootstrapu nebo i databáze).

triak
Člen | 3
+
0
-

Tak to je ostatně taky pravda, nicméně mě připadá, že ACL je trochu kanón na vrabce, v tomto případě.

JakubKohout
Člen | 92
+
0
-

triak napsal(a):

Tak to je ostatně taky pravda, nicméně mě připadá, že ACL je trochu kanón na vrabce, v tomto případě.

proč by to měl bejt kanón na vrabce ?
Definuješ si na tvrdo v kódu resource + přístupová práva jaká skupina může a pak se jenom zeptáš

<?php
$this->getUser()->isAllowed($resource);
?>