2016-09-30 135 views
0

我有簡單的基於角色的訪問在我Yii2應用程序中設置的是這樣工作的:yii2重定向基於訪問角色更改密碼頁

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'ruleConfig' => [ 
        'class' => AccessRule::className(), 
       ], 
       'only' => ['logout', 'contact', 'change-password'], 
       'rules' => [ 
       [ 
        'actions' => ['login'], 
        'allow' => true, 
        'roles' => ['?'], 
       ], 
       [ 
        'actions' => ['logout', 'contact', 'change-password'], 
        'allow' => true, 
        'roles' => [ 
         User::ROLE_USER, 
         User::ROLE_ADMIN 
        ], 
       ], 
       [ 
        'actions' => ['logout', 'change-password'], 
        'allow' => true, 
        'roles' => [ 
         User::ROLE_NEW_USER 
        ], 
       ], 
      ], 
     ], 
     'verbs' => [ 
      'class' => VerbFilter::className(), 
      'actions' => [ 
       'logout' => ['post'], 
      ], 
     ], 
    ]; 
} 

當用戶沒有登錄,試圖訪問註銷,聯繫人或更改密碼頁面將重定向到登錄頁面。我還想對此進行配置,以便具有角色ROLE_NEW_USER的用戶始終被重定向到更改密碼頁面,直到其狀態更改(更改密碼時更新數據庫中的狀態)。

是否可以用denyCallback做到這一點,或者有沒有辦法使用重定向到登錄頁面重定向到其他頁面?

回答

0

如文檔:

訪問規則支持許多選項。 您也可以擴展yii\filters\AccessRule以創建您自己的自定義訪問規則類

這允許您創建用戶是否改變has'n密碼,檢查自定義規則又和重定向無論你想

0

好了,一些擺弄後,我設法得到它與控制器的beforeAction()函數的工作:

public function beforeAction($action) 
{ 
     if (Url::current() != Url::toRoute('site/change-password') 
      && isset(Yii::$app->user->getIdentity()->role) 
      && Yii::$app->user->getIdentity()->role == User::ROLE_NEW_USER) { 
      return Yii::$app->getResponse()->redirect(Url::toRoute('site/change-password')); 
     } 

     if (!parent::beforeAction($action)) { 
      return false; 
     } 

     return true; 
} 

確保你包括地址::電流()!=地址:: toRoute(「網站/更改密碼」),或者你在一個重定向循環結束了。