Omezení přístupu pro nepřihlášené uživatele
- Shidi
- Člen | 5
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
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
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
- Pavel Kravčík
- Člen | 1196
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
@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
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.