Omezení přístupu pro nepřihlášené uživatele

Shidi
Člen | 5
+
0
-

Ahoj všem,
řeším pro svůj web klientskou sekci v nette a chci docílit následujícího. Nový návštěvník bude mít přístupnou pouze HP, na které je možnost se registrovat a přihlásit. Když se pokusí jít kamkoli jinam přes url, tak bych chtěl zobrazit stránku s informací že nemá přístup, že se musí přihlásit. Přihlášený pak může kamkoliv.

Kde a jakým způsobem toto nejlépe dosáhnout?

Do teď jsem to řešil přesměrováním na HP přímo v presenterech „nedostupných“ stránek takto, ale určitě je i elegantnější způsob..
Všem moc dík za pomoc.

<?php
if (!$this->user->isLoggedIn()) {
			$this->redirect('Homepage:homepage');
		}
?>
Pavel Kravčík
Člen | 1196
+
+1
-

To je v pohodě způsob. Ideálně si udělej AuthPresenter a všechny „zakázané“ od něj odvozuj přes extends AuthPresenter.

Shidi
Člen | 5
+
0
-

Ok, ale když teď v podstatě všechny presentery mají extends BasePresenter, kde mám i část kódu, který využívají všechny stránky, tak mám udělat to, že bude AuthPresenter odvozenej od BasePresenteru a pak ve všech „zakázaných“ bude extends AuthPresenter? Nebo to mám od základu blbě postavené?

A ještě se zeptám.. to ověření uživatele mám momentálně v metodě beforeRender(). To je v pořádku nebo se najde vhodnější umístění?

Děkuju

Ages
Člen | 128
+
0
-

@Shidi
Nebo si napiš metodu checkRequirements() přímo v base presenteru.

Pavel Kravčík
Člen | 1196
+
+4
-

Ideálně:

abstract BasePresenter extends UI\Presenter
// společný kód pro všechny presentery

abstract AuthPresenter extends BasePresenter
// check login

HomepagePresenter extends BasePresenter
// dostupný všem

SecurePresenter extends AuthPresenter
// presenter který vyžaduje přihlášení

Osobně bych dal přihlášení výše v https://doc.nette.org/…n/presenters#…. Třeba do metody startup().

Shidi
Člen | 5
+
+1
-

@Ages
O této variantě jsem zde už nějaký koment četl, nicméně jsem nenašel pro mě srozumitelné vysvětlení implementace :-( (nette se učím týden).

@PavelKravčík
Přesně takto to teď mám a to moje ověření s redirectem mám teď ve startup(). Zdá se, že to chodí zatím bezchybně

Jinak díky všem za příspěvěk, určitě vás budu ještě párkrát otravovat :-) Hezký den všem

Kamil Valenta
Člen | 822
+
+4
-

Tato cesta:

abstract BasePresenter extends UI\Presenter
// společný kód pro všechny presentery

abstract AuthPresenter extends BasePresenter
// check login

HomepagePresenter extends BasePresenter
// dostupný všem

SecurePresenter extends AuthPresenter
// presenter který vyžaduje přihlášení

je sice možná, ale IMHO trochu vnášení dědičnost tam, kam nepatří. Já mám implementaci checkRequirements() v traitě TSecurePresenter a tu si připojím, kam potřebuju.
Takže nějak takto:

abstract BasePresenter extends UI\Presenter
// společný kód pro všechny presentery

HomepagePresenter extends BasePresenter
// dostupný všem

SecurePresenter extends BasePresenter use TSecurePresenter
// presenter který vyžaduje přihlášení

Rozdíl se projeví ve chvíli, kdy potřebuju, aby Presenter „uměl“ více „sdílených“ metod. U trait si to libovolně nakombinuju, u dědičnosti jsem v pasti.

Ages
Člen | 128
+
0
-

@Shidi
Můžeš kouknout sem

Shidi
Člen | 5
+
0
-

@Ages
Díky za tip, určitě mrknu, už jsem totiž s tím dvakrát děděným zápisem narazil :-/