v AdminModule pre neprihlaseneho nepresmerovat 404 na ErrorPresenter ale na SignPresenter

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
duskohu
Člen | 778
+
0
-

Dobry den,
viete mi niekto poradit ako by sa dalo urobit toto?

Ako v AdminModule ( pre Admin A front mam BasePresenter)
presmerovat neprihlaseneho uzivatela ked nastane 404 nie na ErrorPresenter, ale na SignPresenter????

Dakujem.

duskohu
Člen | 778
+
0
-

este ma napadlo ze to komplikujem,

asi by sa dalo vsetko v AdminModule pre neprihlaseneho presmerovat na SignPresenter

Jan Endel
Člen | 1016
+
0
-

Šel bych na to asi nějak takto, podědil bych si aktuální ErrorPresenter z distribuce a do mého nového bych danou funkcionalitu dopsal. Teď jsem si uvědomil, že to co chceš, je vlastně blbost která by strašlivým způsobem mátla uživatele.

public function actionDefault($exception)
{
	//zjištění zda-li jsem v adminModulu
	//pokud je $exception->getCode() == 404 přesměrování na SignPresenter
}

Druhá část se provede už snadno:

namespace AdminModule;

class SecuredPresenter extends BasePresenter
{
    protected function startup()
    {
        parent::startup();

        if (!$this->context->user->isLoggedIn() || !$this->context->user->isInRole('administrator')) {
			$this->flashmessage('Pro přístup do administrace se musíte přihlásit.', 'error');
			$this->redirect('Login:');
		}
    }

}

Editoval pilec (2. 2. 2012 23:50)

duskohu
Člen | 778
+
0
-

Dakujem toto by slo, ale trosku inak som to urobil

BasePresenter
	FrontModule
		HomepagePresenter

	AdminModule
		SecuredPresenter

a v som dal:

namespace AdminModule;

class SecuredPresenter extends \BasePresenter
{
    protected function startup()
    {
        parent::startup();
	if(!$this->isLinkCurrent('Login:in')){
        	if (!$this->context->user->isLoggedIn() || !$this->context->user->isInRole('administrator')) {
                        	$this->flashmessage('Pro přístup do administrace se musíte přihlásit.', 'error');
                        	$this->redirect('Login:');
                }
	}
    }

}

a overujem ci niecom v Login:in, ale neviem ci je to dobre
takto dosiahnem to ze vsetko co nejde do Login:in od neprihlaseneho presmerujem na Login:in takze nebude mat ani moznost zobrazit error 404, alebo nieco dalsie.

Editoval duskohu (3. 2. 2012 0:16)

duskohu
Člen | 778
+
0
-

ale zase ked dam http://localhost/…uciPresenter tak je to v poriadku
ale ked dam:
http://localhost/…Neexistujuce
tak mi nenajde ten Presenter, takze to musim nakoniec dat do BasePresenter

Vsak?

Jan Endel
Člen | 1016
+
0
-

Pakliže přistoupí do neexistujícího presenteru v administraci, tak bych mu klasicky zobrazil patrně 404 z frontEndu (páč kdo může do administrace, tak přeci nebude cíleně měnit URL a jinak se na neexistující stránku nedostane).

duskohu
Člen | 778
+
0
-

ale pokial by som chcel skusat napr ci mam admin/test a ked mi vrati 404 tak neexistuje ale ak ma presmeruje na Login:in tak stranka existuje, a chcel by som zabranit pre neprihlaseneho uzivatela aby sa dostal k akejkolvek info o admine okrem toho co bude mat v Login:in

Ci paranoja???? :-)

Jan Endel
Člen | 1016
+
0
-

Paranoja trošku, tím kódem SecuredPresenteru zabezpečíš, že nikdo nepovolaný se k daným Presenterům a jejich akcím nedostane. A když záměrně zkouší změnit URL je přeci jasné, že mu vyskočí Server Error ⇒ děláš co nemáš, tak ti to zakážu.