Problém s odhlašováním a dynamické zobrazení odkazů

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

Z neznámých důvodů mi nefunguje mi odhlašování. Kdyby jenom to – nefunguje mi odhlašování pouze u některých uživatelů.

Metodu Logout mám v AuthPresenteru (zkoušel jsem ji přemístit do BasePresenteru – se stejným výsledkem).

public function renderLogout()
	{
		Environment::getUser()->signOut();
		$this->getApplication()->restoreRequest($this->backlink);
	}

Odkaz jsem umístil přímo do @layoutu – možná je to trochu eckel – ale je to kvůli jistotě zobrazení na všech stránkách.

<!-- right pannel -->
<div class="col3">
<!-- login -->
{if isset($userlogged)}
	<h5>{$userlogged} <a class="speclink" href="{plink 'Auth:logout'}">(odhlásit)</a></h5>
{else}
	{$loginform}
	<h5><a class="speclink" href="{plink 'Auth:sign'}">(Registrace)</a></h5>
{/if}
<!-- right block -->
{block #rightcontent}

<h3>Aktuality</h3>

{/block}
</div>

Napadlo mě, jestli to nemůže být prostředím (teď přijde něco, co vůbec nepatří do tohoto tématu, tak mi moc nenadávejte – myslím si totiž, že vůbec nejsem sám, kdo na podobnou věc v poslední době narazil) – před pár dny mě napadlo, že je třeba provést upgrade – Apache, PHP, MySQL. To jsem ještě netušil, že poslední verze MySQL, kterou se mi podaří nainstalovat, je 5.0.65. Pak jsem brouzdáním po světě zjistil, že se jedná o mezinárodní záležitost – jeden hinduista z Bombaje dokonce všem radil, ať si nainstalují verzi 4.1, že to na doma stačí. Nicméně – nakonec jsem byl nucen (i když velmi nerad) sáhnout po nějaké triádě – WampServer5 se to jmenuje. Od té doby se to chová divně. Kdybyste někdo měl nápad…

Co se týče dynamického zobrazení odkazů. Možná už to tu na fóru někdo zmínil – jde spíš o to, kam přesunout rozhodování.
isAllowed řeším ve Startupu v BasePresenter:

	protected function startup()
	{
		$name = $this->name;
		$view = $this->view;

		//If this resource isn't allowed => get out
		$user = Environment::getUser();
		if(!$user->isAllowed($name, $view)) {
			$this->getApplication()->restoreRequest($this->backlink);
		}
		//View username | login form
		if($user->isAuthenticated()) {
			$this->template->userlogged = $user->getIdentity()->getName();
		} else {
			$this->template->loginform = $this->getComponent('loginForm');
		}

		parent::startup();
	}

Jednoduchým způsobem – uživatele to při nedostatku práv neodhodí někam na přihlášení – přihlašovací formulář je fixně v pravém sloupci layoutu. Uživatel prostě a jednoduše zůstane kde je. Daleko lepší by ovšem bylo, kdyby se odkazy mohly dynamicky přizpůsobit tomu, kdo je přihlášen.
Tj. bude-li na stránce guest, nezobrazí se mu vedle položky z databáze ikona z odkazem pro úpravu a neuvidí odkaz pro přidání záznamu. Bude-li uživatel přihlášen (registered), uvidí odkaz pro přidání záznamu. Přihlásí-li se admin, zobrazí se mu všechny odkazy.
Jde o to, kde se o zobrazení bude rozhodovat – jestli v presenteru (asi logičtější, ale trochu neohrabané), nebo jestli existuje způsob, jak o tom rozhodnout v šabloně (což možná zase trochu odporuje filozofii tohoto frameworku).

lactarius
Člen | 47
+
0
-

Ahoj vespolek.

Za ten údajný problém s odhlášením se omlouvám – je to spíš ostuda. Den a půl jsem strávil odhalováním záhady. Spočívala pouze s rozvržením ACL – uživatel s rolí ‚registered‘ – a dědičně i ‚moderator‘ měl v allows pro resource ‚Auth‘ nastaveno ‚sign‘ a ‚edit‘ – ‚logout‘ už ovšem ne.
Jsem rozhodnut v pondělí odevzdat občanku a vrátit se na strom.

Nicméně – s tím zpřístupněním funkcí podle typu uživatele to určitě nějak jde. Nikde jsem to tu zatím nenašel, tak kdybyste někdo měl chvilku, předem dík.

Ondřej Mirtes
Člen | 1536
+
0
-

Já ve startupu vynechávám ověření pro presentery jako je Login, Registration apod., protože by bylo nelogické tam někomu zakazovat přístup :)

Jan Jakeš
Člen | 177
+
0
-

Jen malá poznámka – máš nějaký důvod umisťovat odhlašování do fáze render? Mnohem víc by se hodilo do action, případně signal.

lactarius
Člen | 47
+
0
-

Juan napsal(a):

Jen malá poznámka – máš nějaký důvod umisťovat odhlašování do fáze render? Mnohem víc by se hodilo do action, případně signal.

To je pravda. Měl bych si nechat zarámovat životní cyklus presenteru.