2015-07-11 44 views
1

我在行爲使用AccessControl控制器的功能是這樣的:Yii2:設置訪問控制過濾器重定向禁止後

public function behaviors() 
    {  
     return [ 
      'access' => [ 
       'class' => AccessControl::className(), 
       'rules' => [ 
        [ 
         'actions' => ['login', 'error'], 
         'allow' => true, 
        ], 
        [ 
         'actions' => ['logout', 'index'], 
         'allow' => true, 
         'roles' => ['@'], 
         'matchCallback' => function(){ 
          return (Yii::$app->user->identity->ROLE_ID=='1'); 
         } 
        ], 
       ], 
      ], 
     ]; 
    } 

在我的應用程序有一個2的作用,管理用戶,ROLE_ID 1是管理員和role_id 2是員工,都可以訪問/app/administrator,所以我過濾。當我與員工登錄時,它會顯示禁止頁面。

當登錄的用戶不是admin時,我想重定向回登錄頁面。也許我必須在AccessControl選項中添加腳本。那麼,我能做什麼?謝謝

回答

1

您需要指定denyCallback來實現此目的。

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'rules' => [ 
       //your access rules 
      ], 
      'denyCallback' => function($rule, $action) { 
       //redirection here 
      } 
     ], 
    ]; 
} 

請注意,這個denyCallback將在每次訪問被拒絕時調用。如果您需要特定規則denyCallback你想不同的應用程序的行爲,那麼你需要像這樣指定它:

'rules' => [ 
    //other rules 
    [ 
     'actions' => ['index'], 
     'allow' => false, 
     'roles' => ['@'], 
     'matchCallback' => function(){ 
      return (Yii::$app->user->identity->ROLE_ID == 2); 
     }, 
     'denyCallback' => function(){ 
      //redirect here 
     } 
    ], 
], 

在這裏,我們明確禁止以指數行動用戶ROLE_ID == 2,並把它們放在訪問。

+0

謝謝!有用 :) – ariyandi