2016-06-28 5 views
0

に権限のないユーザーをリダイレクトする私は、ログインのために、このコントローラのコードがあります。別のコントローラのアクション

public function actionLogin() 
     { 
      if (!\Yii::$app->user->isGuest) { 
       return $this->redirect(Yii::$app->request->baseUrl.'/telephone/index'); 
      } 

      $model = new LoginForm(); 
      if ($model->load(Yii::$app->request->post()) && $model->login()) { 
       return $this->redirect(Yii::$app->request->baseUrl.'/telephone/index'); 
      } 
      return $this->render('login', [ 
       'model' => $model, 
      ]); 
     } 

と私は使用権限のないユーザーのためのadddelete作用を防止するために:

public function behaviors() 
{ 
    return [ 
      'access' => [ 
      'class' => AccessControl::className(), 
      'only' => ['add','delete'], 
      'rules' => [ 
       // allow authenticated users 
       [ 
        'allow' => true, 
        'roles' => ['@'], 
       ], 
       // everything else is denied by default 
      ], 
     ], 
    ]; 
} 

しかし、権限のないユーザーの場合を追加または削除すると、site/loginにリダイレクトされます。コントローラとアクションをどのように変更できますか?

答えて

2

このルートを変更するには、スコープによって異なる方法があります。それらはすべて、yii\web\UserクラスのloginUrlプロパティを変更する必要があります。

グローバル

編集の設定ファイル。

'components' => [ 
    'user' => [ 
     'loginUrl' => ["controller/action"], 
    ], 
], 

コントローラ/アクションコントローラの

編集beforeAction方法。

public function beforeAction($action) 
{ 
    // action-specific 
    if(in_array($action->id,['not', 'allowed', 'actions'])) 
     Yii::$app->user->loginUrl = ["controller/action"]; 

    // controller-wide 
    Yii::$app->user->loginUrl = ["controller/action"]; 

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

    return true; 
} 
+0

それが機能していないいずれかの方法。まだサイト/ログインにリダイレクト – micky

+0

また、他の答えを考慮に入れて、sitecontrollerのアクセスルールも設定しましたか? – ttdijkstra

+0

または無効なルートかもしれません。設定で 'loginUrl'プロパティを' null'に設定してみてください。これはdenycallbackアクセス時に '403 exception'を与えるはずです。 – ttdijkstra

-1
public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'only' => ['add','delete'], 
      'rules' => [ 
       'allow' => true, 
       'actions' => ['add','delete'], 
       'roles' => ['@'], 
       'denyCallback' => function ($rule, $action) { 
        return $this->redirect('index.php?r=site/login'); 
       } 
      ], 
     ], 
    ]; 
} 
+0

は、matchcallbackのURLを変更しても、サイト/ loiginにリダイレクトされます。 – micky

関連する問題