2017-01-11 6 views
1

私はweb.phpファイルに次の設定をして、ユーザーがアプリを使用する前にまずログインするようにします。YII2 accesscontrolでデバッグ/デフォルト/ツールバーを許可する方法

'as access' => [ 
     'class' => \yii\filters\AccessControl::className(), //AccessControl::className(), 
     'rules' => [ 
      [ 
       'actions' => ['login', 'error'], 
       'allow' => true, 
      ], 
      [ 
       'actions' => ['logout', 'index'], // add all actions to take guest to login page 
       'allow' => true, 
       'roles' => ['@'], 
      ], 

     ], 
    ], 

私はルールでその中でできるようにする方法http://localhost/yii2/debug/default/toolbar?tag=58759099581f2

Forbidden (#403)エラーが出ますが?

答えて

1

まず、この設定は間違っています。この部分は:

[ 
    'actions' => ['logout', 'index'], // add all actions to take guest to login page 
    'allow' => true, 
    'roles' => ['@'], 
], 

は、さらに認証されたユーザーにのみlogoutindexアクションができるようになります。

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

サイト全体にアクセスできるようにする必要があります。次に、AccessControlまたは特定のコントローラの操作でアクセスをさらにカスタマイズすることができます。あなたの場合、デバッグだけが禁じられたページではありません。

ここではthis answerから関連する質問にコピー貼り付けされたと思います。

とデバッグがすでに基本的なアプリでアプリケーションの設定で有効になっている方法によって:

if (YII_ENV_DEV) { 
    // configuration adjustments for 'dev' environment 
    $config['bootstrap'][] = 'debug'; 
    $config['modules']['debug'] = [ 
     'class' => 'yii\debug\Module', 
     // uncomment the following to add your IP if you are not connecting from localhost. 
     //'allowedIPs' => ['127.0.0.1', '::1'], 
    ]; 

    // Below Gii is enabled too, code is omitted for brevity 
} 

ユーザーが認証されたときに、あなたは何の問題もなくデバッグ・モジュールにアクセスする必要があります。

注:この設定loginすべてのコントローラのerrorアクションでは、非認証されたユーザーに許可されています。それには注意してください。他のコントローラーにも同様の名前のアクションが存在する可能性があります。

更新:実はあなたはさらに行くと$matchCallbackと、このソリューションをより柔軟にすることができます:それは内部のかどう$allowedControllersリストで

'as access' => [ 
    'class' => \yii\filters\AccessControl::className(), 
    'rules' => [ 
     [ 
      'matchCallback' => function ($rule, $action) { 
       $allowedControllers = [ 
        'debug/default', 
       ]; 
       $allowedActions = [ 
        'site/login', 
        'site/error', 
       ]; 
       $isAllowedController = in_array($action->controller->uniqueId, $allowedControllers); 
       $isAllowedAction = in_array($action->uniqueId, $allowedActions); 

       return $isAllowedController || $isAllowedAction; 
      }, 
      'allow' => true, 
     ], 
     [ 
      'allow' => true, 
      'roles' => ['@'], 
     ], 
    ], 
], 
  • 置き、完全に許さコントローラ(モジュール名を前に付けモジュール)を使用して完全に許可します(すべてのアクションを許可します)。
  • $allowedActionsリストに許可されたアクションを置きます(コントローラー名とモジュール名の前にコントローラー名が付いています)。あなたが役立つことができます(loginerrorを含む)すべてのページにローカルサーバー上のデバッグモジュールへのフルアクセスを持つことができる方法

これはまた、異なるモジュール/コントローラからのアクション名の一致を防止します。

関連する問題