2014-09-23 10 views
23

Nella mia applicazione Yii2 sto provando a forzare tutti gli utenti ad essere autenticati. Se non sono già autenticati, dovrebbero essere reindirizzati alla pagina di accesso.Yii2 filtro globale/comportamento per forzare l'utente ad autenticare prima

In Yii1 ho fatto questo creando una classe che controllasse se un utente era loggato e collegava quella classe al comportamento onBeginRequest nel mio file di configurazione principale.

// Yii 1 
'behaviors' => array(
    'onBeginRequest' => array(
     'class' => 'application.components.RequireLogin', 
    ) 
), 

Come posso ottenere lo stesso comportamento in Yii2? So che posso usare il comportamento per farlo, ma non voglio aggiungere questo comportamento al mio file di configurazione principale in modo tale che tutte le richieste vengano prima controllate per l'autenticazione.

Il metodo comportamenti di lavoro assomiglia a questo:

// Yii2 
public function behaviors() { 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'rules' => [ 
       [ 
        'actions' => ['login', 'error'], 
        'allow' => true, 
       ], 
       [ 
        'allow' => true, 
        'roles' => ['@'], 
       ], 
      ], 
     ], 
    ]; 
} 
+0

Hai provato ad aggiungere un controllo accessi al controller di base? – karlingen

risposta

28

Ok, quindi ho dovuto aggiungere il seguente codice sotto 'components' => [...]

'as beforeRequest' => [ 
    'class' => 'yii\filters\AccessControl', 
    'rules' => [ 
     [ 
      'actions' => ['login', 'error'], 
      'allow' => true, 
     ], 
     [ 

      'allow' => true, 
      'roles' => ['@'], 
     ], 
    ], 
], 

Per saperne di più sul formato: http://www.yiiframework.com/doc-2.0/guide-concept-configurations.html#configuration-format

+10

Suggerimento: questo codice aggiunge un comportamento all'applicazione. Non deve essere parte di componenti - deve essere parte della configurazione stessa. Ecco perché jagsler ha scritto ** sotto ** componenti, non _in_ componenti. E ''as someNameHere' => ...' è la sintassi per l'aggiunta di comportamenti. Cerca qui [doc] (http://www.yiiframework.com/doc-2.0/guide-concept-configurations.html#configuration-format). Scrivo solo perché ho passato alcune ore a scoprirlo. – robsch

+0

Molto bello. Mi fa risparmiare tempo. – israr

+0

Un'altra nota: è necessario avere un controller e un'azione 'sito/login' perché questo viene chiamato se l'utente non ha effettuato l'accesso e non si applica alcuna regola. Questo può essere modificato nella configurazione (vedere [qui] (http://www.yiiframework.com/doc-2.0/yii-web-user.html) per ulteriori informazioni) se l'azione di login ha un altro nome o è un altro controller . – robsch

-1

I In realtà non sono esperto in Yii2 (ma molto in Yii1).

Una soluzione che può essere impiegata in Yii1 e suppongo anche in Yii2 sta avendo un metodo di filtro in una classe controller principale. In genere un singolo controller funge da controller principale. Se non ne hai uno, crealo e tutti dovrebbero estenderlo. È possibile implementarlo probabilmente non come filtro ma in altri metodi di questo 'controller principale' (init()?) Se tutta l'attività passa attraverso la classe controller, allora si è impostati.

Problemi correlati