routovani do administratorskeho rozhrano

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

Dobry den,

potreboval bych jednak routovat do administratorskeho rozhrani a pote ochranit administratorske rozhrani oproti neopravnenemu pristupu.

Mam dve moznosti:

  • zaridit to pres routy
  • v kazdem presenteru pred kazdou cinnosti kontrolovat, zdali je uzivatel nalogovan

Zatim mam prvni variantu a v bootstrapu mam nasledujici:

if ($user->isLoggedIn() && $user->isInRole('admin'))
   {
        $router[] = new Route('admin/<presenter>/<action>/<id>', array(
            'module' => 'Admin',
            'presenter' => 'MainPage',
            'action' => 'default',
            'id' => NULL,
        ), Route::SECURED);

   }

Pri prvnim prihlaseni se mi objevi „500 internal server error“ a v chybe je ze neexistuje routa na administratorske rozhrani. Provedu refresh stranky se znovuodeslanim informaci a vse jiz funguje. Potreboval bych se zeptat, jak tuto chybu odstranit a jestli je to spravny pristup. Predem dekuji za odpovedi.

redhead
Člen | 1313
+
0
-

A proč zabezpečuješ route? Routu nech tak jak je, tzn. žádný if(), a zebezpeč BasePresenter v administračním modulu, v metodě startup (pokud není přihlášen, redirectne na nějaký přístupný presenter, z hláškou, že nemá opravnění; pokud má, pak je vše v pořádku).

Btw je to logické, copak může vědět na kterou stránku jít, pokud neexistuje pro tu stránku routa? Přihlášení se stejně provede až v nějakém presenteru (ne v bootstrapu před definicí rout), proto to jde až po refreshi.

jirkamailto
Člen | 27
+
0
-

Dekuji za namet, snazim se to dat do base presenteru. Mam s tim ale trochu problem, mam v defaultni adresarove strukture adresar presenter. V nem BasePresenter:

abstract class BasePresenter extends Presenter
{
	public $oldLayoutMode = FALSE;

        public function  beforeRender() {


            }
}

V adresari presenter mam dale adresar AdminModule a v nem BasePresenter pro admin rozhrani:

abstract class Admin_BasePresenter extends BasePresenter
{
	public $oldLayoutMode = FALSE;
	public function  beforeRender() {
		$this->template->control = "sdfsdf";
	}
}

Bohuzel nic z toho administratorskeho base presenteru se mi nevypisuje. Musim nekde nastavit, aby v pripade vstupu na admin rozhrani se vzal BasePresenter z AdminModule?

mkoubik
Člen | 728
+
0
-

Prostě presentery pro admin rozhraní podědíš z toho Admin_BasePresenter místo BasePresenter.

jirkamailto
Člen | 27
+
0
-

Prave jsem to udelal u FrontModule, coz ma uplne stejnou adresarovou strukturu jako AdminModule, a pise mi to chybu

Class ‚Front_BasePresenter‘ not found

Mam v adresari FrontModule soubor BasePresenter.php

abstract class Front_BasePresenter extends BasePresenter
{
}

a napriklad Domovska stranka HomepagePresenter.php

class Front_HomepagePresenter extends Front_BasePresenter
{
}

Nevite kde muze byt chyba?

jansfabik
Člen | 193
+
0
-

jirkamailto napsal(a):

Prave jsem to udelal u FrontModule, coz ma uplne stejnou adresarovou strukturu jako AdminModule, a pise mi to chybu

Class ‚Front_BasePresenter‘ not found

Mam v adresari FrontModule soubor BasePresenter.php

abstract class Front_BasePresenter extends BasePresenter
{
}

a napriklad Domovska stranka HomepagePresenter.php

class Front_HomepagePresenter extends Front_BasePresenter
{
}

Nevite kde muze byt chyba?

pokud používáš RobotLoader, tak zkus promazat složku app/tmp

jirkamailto
Člen | 27
+
0
-

Dobry vecer, dekuji vsem, uz to funguje. Pomohlo smazani tempu base presenter uz jede z modulu. Do metody startup jsem dal overeni uzivatele a take funguje.