【问题标题】:Deny access to the application for the role. Yii2拒绝对该角色的应用程序的访问。 Yii2
【发布时间】:2016-09-05 21:52:04
【问题描述】:

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

前端用户具有“客户”角色。

如何禁用对具有“客户端”角色的应用程序后端用户的访问权限。允许所有其他角色访问。 site/login 在后端允许所有用户。

我在main.phpfile 中写了以下代码:

'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

【问题讨论】:

  • 角色client的用户是否登录了前端?
  • 是的!要访问前端用户必须登录。

标签: php yii2


【解决方案1】:

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

匹配来宾用户(尚未经过身份验证)

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

  1. 用户已登录,但角色为client,因此不被允许。
  2. 由于用户被拒绝访问,重定向到site/login
  3. 见 1。

这可以通过在第一条规则中省略 roles 元素来解决:

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

然而这是错误的方法

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

【讨论】:

  • 我的第一条规则:[ 'allow' => true, 'controllers' => ['site'], 'actions' => ['login'], ], 但我仍然收到错误ERR_TOO_MANY_REDIRECTS
猜你喜欢
  • 1970-01-01
  • 2015-09-20
  • 2011-10-19
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多