Problém s odhlašováním a dynamické zobrazení odkazů
- lactarius
- Člen | 47
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
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
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 :)