我有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
。
答案 0 :(得分:1)
From the guide 'roles' => ['?']
:
匹配访客用户(尚未经过身份验证)
由于用户已登录,因此他们陷入了由第二条规则和denyCallback
引起的重定向循环,即
client
,因此不允许。site/login
。可以通过省略第一条规则中的roles
元素来解决此问题:
如果[role]未设置或为空,则表示此规则适用于所有角色。
但这是错误的方法
登录但具有角色client
的用户应被拒绝访问后端。将它们发送到登录将无济于事,因为它们已经登录。正确的操作方法是将它们发送到前端的错误页面。