Role ‚guest‘ does not exist
- Jarek92
- Člen | 91
Zdravím,
mám ve své aplikaci dynamické ACL a narazil jsem na drobný problém. V ACL
mám definované zdroje, na které se pak dotazuji (v tomto případě)
v šabloně pomocí $user->isAllowed($resource). Pokud je uživatel
přihlášen, má logicky tedy vždy přiřazenou právě jednu roli a vše
funguje. Problém nastává v případě, že uživatel přijde k šabloně
v okamžiku, kdy není přihlášen, tedy mu Nette nastaví výchozí roli
„guest“. Tehdy Nette vyhodí (logicky) chybu: Role ‚guest‘ does
not exist.
Jak to řešíte Vy? Nadefinujete formálně ještě roli „guest“, nebo zabráníte tomu, aby při dotazování na oprávnění uživatele byl uživatel odhlášen?
- Šaman
- Člen | 2661
Většinou obojí.
Roli guest
si nadefinuji vždy když používám ACL.
Ale většinou mám veřejnou část, kde se oprávnění neřeší a pak
chráněnou část, tu mám za mým SecuredPresenter, který tam nepustí nikoho
nepřihlášeného:
<?php
public function checkRequirements($element)
{
parent::checkRequirements($element);
if (!$this->user->isLoggedIn())
{
$this->flashMessage('Nejprve se přihlašte.', 'danger');
$this->redirect('App:login');
}
}
?>
(Pozor na to, že v tomto případě AppPresenter nesmí dědit od Secured, protože by se to zacyklilo. AppPresenter ma jen metodu login a logout a je nechráněný.)
Editoval Šaman (12. 11. 2016 8:42)
- Jarek92
- Člen | 91
OK díky. V secure části to mám stejně, taky vždy kontroluju nejprve přihlášení, nicméně na frontendu mám výpis komentů (veřejný pro všechny), které mají funkce (smazat atd), takže se tam dotazuji na to jestli má uživatel právo mazat komenty a když není přihlášen, vyhodí to chybu.
Editoval Jarek92 (12. 11. 2016 9:49)