2016-09-30 10 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; 
} 

:: URLを含めることを確認し、現在の()!=のURL :: toRoute( 'サイト/パスワード変更')か、リダイレクトループで終わります。

関連する問題