Role ‚guest‘ does not exist

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

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 | 2632
+
+2
-

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

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)