Vykreslení prvků v šabloně podle oprávnění
- weckho
- Člen | 94
Ahoj,
úspěšně jsem podle návodů, které jsem sesbíral zde na fóru, zprovoznil přihlášení uživatele. Nikde jsem však nenašel jednu věc. Jak mohu v šabloně (nebo presentru?) určit, které prvky na stránce vykreslit jen přihlášeným uživatelům? Řekněme, že nechci po přihlášení vykreslit formulář pro přihlášení, a chci vykreslit třeba menu navíc. Jak toho dosáhnu?
Díky moc!
- redhead
- Člen | 1313
no dokud nebudeš chtít používat složitější řešení s rolema a resourcama, můžeš použít tento kód v startup metodě BasePresenteru
$this->template->isLogged = Environment::getUser()->isAuthenticated();
a v šabloně např.:
{if $isLogged}
//menu
{/if}
{if !$isLogged}
//prihlasovaci formular
{/if}
ale není to nejlepší.
(viz Autorizace)
- Patrik Votoček
- Člen | 2221
Já sem si na to napsal vlastní makro…
class CurlyBracketsExtra
{
/**
* If allow macro by presenter link
*
* @param IPresenter $presenter
* @param string $link
*/
public static function ifAllow(IPresernter $presenter, $link)
{
$presenter->link($link);
$presenterRequest = $presenter->lastCreatedRequest;
$params = $presenterRequest->getParams();
$signal = isset($params['do']) ? "signal_".$params['do'] : FALSE;
$signal = strpos($signal, '-') === FALSE ? $signal : FALSE;
if ($signal === FALSE)
return Environment::getUser()->isAllowed($presenterRequest->getPresenterName(), $params['action']);
else
{
if (Environment::getUser()->isAllowed($presenterRequest->getPresenterName(), $params['action']))
{
if (Environment::getUser()->isAllowed($presenterRequest->getPresenterName(), $signal))
return TRUE;
}
}
return FALSE;
}
}
Je to dost specificke protoze moje ACL vrstva je zjednodusene receno neco takoveho:
resource = presenter name
privilege = action name / signal name s prefixem 'signal_'
vice viz: https://doc.nette.org/…thentication
pak uz to v sablone pouzivas stejne jako presenter link (plik) makro
{ifAllow Admin:}<a href="{plink Admin:}">Admin</a>{/if}
Edit: zapomel jsem definici makra
'ifAllow' => "<?php if (CurlyBracketsExtra::ifAllow(\$presenter, %%)): ?>",
Editoval vrtak-cz (23. 8. 2009 23:57)
- weckho
- Člen | 94
Díky. Mám přihlášeného uživatele v roli admina a potřebuji teď vykreslit v šabloně to menu. Jak přímo v kódu šablony zajistím, že se menu vykreslí jen adminovi (uživateli s rolí admin)? V článku o autorizaci není ukázka kódu šablony.. trochu v tom plavu.
Díky moc.
- Panda
- Člen | 569
K objektu uživatele můžeš z šablony přistupovat stejně jako z presenteru:
{if Environment::getUser()->isInRole('admin')}
{* ... *}
{/if}
Samozřejmě, že si na to opět můžeš udělat makro. Také stojí za
zvážení přiřazení objektu User
do šablony, ať se pořád
nevolá metoda Environment::getUser()
.