拒绝访问该角色的应用程序。 Yii2

时间:2016-09-05 13:15:06

标签: php yii2

我有2个应用程序:前端和后端。

前端用户有角色"客户"。

如何使用" client"禁止访问应用程序后端用户?角色。允许访问所有其他角色。后端site/login允许所有用户。

我在main.php文件中编写了以下代码:

'as beforeRequest' => [
    'class' => 'yii\filters\AccessControl',
    'rules' => [
        [
            'allow' => true,
            'controllers' => ['site'],
            'actions' => ['login'],
            'roles' => ['?'],
        ],
        [
            'allow' => false,
            'roles' => ['client'],
        ],
    ],
    'denyCallback' => function () {
        return Yii::$app->response->redirect(['site/login']);
    },
],

我在Chrome中遇到错误:ERR_TOO_MANY_REDIRECTS

1 个答案:

答案 0 :(得分:1)

From the guide 'roles' => ['?']

  

匹配访客用户(尚未经过身份验证)

由于用户已登录,因此他们陷入了由第二条规则和denyCallback引起的重定向循环,即

  1. 用户已登录,但角色为client,因此不允许。
  2. 由于用户被拒绝访问,因此请重定向到site/login
  3. 见1.
  4. 可以通过省略第一条规则中的roles元素来解决此问题:

      

    如果[role]未设置或为空,则表示此规则适用于所有角色。

    但这是错误的方法

    登录但具有角色client的用户应被拒绝访问后端。将它们发送到登录将无济于事,因为它们已经登录。正确的操作方法是将它们发送到前端的错误页面。