2013-06-19 10 views

risposta

3

Usa regola di accesso per achevie questo sarebbe un modo migliore:

public function accessRules() 
{ 
    return array(
     array('allow', // allow all users to perform 'index' and 'contact' actions 
       'actions'=>array('index','contact'), 
       'users'=>array('*'), 
     ), 
     array('allow', // allow authenticated user to perform 'delete' and 'update' actions 
       'actions'=>array('update','delete'), 
       'users'=>array('@'), 
     ), 
     array('deny', // deny all users 
       'users'=>array('*'), 
     ), 
    ); 
} 

se si vuole veramente un posto controllo ,, poi vai a component/controller e lo fa nel controller. perché tutto il controller eredita da quel controller.

+1

non voglio inserirlo in ogni singolo controller, ho bisogno della soluzione globale – rafal235

+0

dove posso trovare 'componente/controller'? – Ruben

+0

@ user2075220 quindi creare un BaseController e avere questo controller estendere il BaseController –

3

È possibile scrivere un controllo nella funzione init() del controller. Che reindirizzare l'utente se non è connesso

public function init() 
{ 
    if(!isset(Yii::app()->session['user'])) 
    { 
     $this->redirect(array('login/')); 
    } 
} 
+0

io non voglio metterlo in ogni singolo controller, ho bisogno di una soluzione globale – rafal235

4

si può anche verificare utilizza questo se è vero allora l'utente non è connesso altro loggato

if(Yii::app()->user->isGuest){ 
    //not logged user 
    }else{ 
    //loggedin user 
    } 
+0

Non voglio metterlo in ogni singolo controller, ho bisogno di una soluzione globale – rafal235

+0

Ya ho ottenuto, ma per ogni azione sono u andando a controllalo ??? – Ninad

-1

Scrivi un codice per verificare se l'utente ha effettuato l'accesso o meno in un altro file.

Quindi includere quella pagina php in ogni file.

Dovrai solo scrivere il seguente codice.

include('checklogin.php'); 

Nella pagina checklogin.php, è possibile scrivere quanto segue per verificare se il cookie è impostato.

isset(cookie('<name_of_cookie>')) 
{ 
//User in already logged in 
} 
else 
{ 
//Redirect to login page 
} 
+0

non voglio metterlo in ogni singolo controller, ho bisogno di una soluzione globale – rafal235

+0

Se è php, allora è l'unica soluzione. Dovrai scrivere quella riga all'inizio di ogni pagina in cui vuoi controllare.

2

Per una soluzione globale aggiungere accessControl al controller di base (per impostazione predefinita protected/components/CController.php).

public function filters(){ 
    return array('accessControl'); 
} 

public function accessRules() 
{ 
    return array(
     array('allow', 
      'users'=>array('@'), 
     ), 
     array('deny', // deny all users 
      'users'=>array('*'), 
     ), 
    ); 
} 

Poi nel controller con il tuo login azione di modifica del accessRules per consentire a tutti gli utenti di accedere alla pagina di login

public function accessRules() 
{ 
    return array_merge(array(
      'allow', 
      'actions'=>array('login'), 
      'users'=>array('*'), 
     ),parent::accessRules() 
    ); 
} 
0

estendere i componenti/regolatore con beforeAction

public function beforeAction(CAction $action) 
{ 
    if(!isset(Yii::app()->session['user']) && !($action->controller->id == 'site' && $action->id == 'login')) 
    { 
     $this->redirect(array('site/login')); 
    } 

    return true; 
} 
3

Questo funziona per me

public function beforeAction(CAction $action) 
{ 
    if(!isset(Yii::app()->user->user_id) && !($action->controller->id == 'site' && $action->id == 'login')) 
    { 
     $this->redirect(array('site/login')); 
    } 

    return true; 
} 

È necessario aggiungere solo la funzione di cui sopra nella componente/controller.php

+0

puoi dirci dov'è componene/Controller.php in Yii2 –

0

Scusate zombie distacco, ma io uso isGuest .

if (Yii::app()->user->isGuest) 
{ 
    $this->redirect('login/page'); 
}