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

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ěď.

bazo
Člen | 620
+
0
-

vloz to do metody startup v presenteri

Jan Endel
Člen | 1016
+
0
-

Tohle se řeší většinou tak, že se vytvoří takzvaný BasePresenter, který má vlastnosti které požaduješ od všech svých presenterů a pak z něj jen dědíš. Tohle je přesně ten případ kdy se vyplatí ho použít.

Jakub
Člen | 30
+
0
-

Super, na startup jsem úplně zapomněl (tím, že ho v těch presentrech nemám :) a BasePresenter mám, tak to hodím asi tam. Díky za rady!

redhead
Člen | 1313
+
0
-

Já to dělám tak, že presentery, které chci mít jen pro přihlášené dědí od nějakého SecuredPresenter (který zas dědí od BasePresenteru), a ten to ověřuje ve startupu, jak už bylo zmíněno.

Ondřej Brejla
Člen | 746
+
0
-

Přesně tak to řeším i já…přijde mi to elegantní.

Jan Endel
Člen | 1016
+
0
-

Velice dobrý nápad, na základě něj poupravím svoji aktuálně vyvíjenou aplikaci. Navíc celý Nette Framework mi přijde děsně elegantní. .)

srigi
Nette Blogger | 558
+
0
-

Pozrite si aj novy tutorial, kde je problematika prihlasovania podrobne rozobrata.

mprokes
Člen | 10
+
0
-

Ú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);
	...
?>