Přesměrování nepřihlášených uživatelů
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Jakub
- Člen | 30
Ahoj,
mám v aplikaci stránky, na které má přístup pouze přihlášený uživatel. V jednotlivých actions těchto stránek mám tento kód, abych přesměroval nepřihlášené uživatele na přihlášení:
$user = Environment::getUser();
if (!$user->isAuthenticated()) {
$this->flashMessage ( 'Přihlašte se, prosím.', 'msg' );
$this->redirect('Default:login');
}
Chci se zeptat, jestli je to takto správně, nebo by to šlo jinak a efektivněji? Třeba nastavit nějak toto přesměrování pro celý presenter (mnoho presentrů je určených pouze pro přihlášené uživatele).
Děkuji za odpověď.
- mprokes
- Člen | 10
Úvedený tutorial je fakt výborný – akorát se mi nechtělo vytvářet secure presenter, a radši testuju přístup rovnou v base presenteru, třeba to někomu k něčemu bude:
<?php
protected function startup() {
parent::startup();
$this->user = Environment::getUser();
if (!$this->user->isAllowed($this->reflection->name, $this->getAction())) {
if ($this->user->isAuthenticated()) {
$this->flashMessage('Byl zaznamenán pokus o neautorizovaný přístup!', 'warning');
...writeToLog("Unauthorized access (".$this->reflection->name.":".$this->getAction().")"...
$this->redirect('Default:');
}
else {
if ($this->user->getSignOutReason() === User::INACTIVITY)
$this->flashMessage('Byli jste příliš dlouho neaktivní, prosím přihlaste se znovu.');
$backlink = $this->getApplication()->storeRequest();
$this->redirect('Auth:login', $backlink);
}
}
}
?>
…a je tedy nutné nastavit explicitně přístupová práva i pro volně přístupné presentery (laděnka na to ale krásně upozorňuje):
<?php
...
$this->addResource('DefaultPresenter');
$this->addResource('AuthPresenter');
...
$this->allow('guest', 'DefaultPresenter', Permission::ALL);
$this->allow('guest', 'AuthPresenter', Permission::ALL);
...
?>