访问代码不工作,用于检查用户是否具有权限-RBAC Yii2
我在验证用户对控制器内的操作(Exm:索引、创建、更新等)的权限时遇到问题,我使用以下代码验证用户的权限: 我的控制器:访问代码不工作,用于检查用户是否具有权限-RBAC Yii2,yii2,rbac,Yii2,Rbac,我在验证用户对控制器内的操作(Exm:索引、创建、更新等)的权限时遇到问题,我使用以下代码验证用户的权限: 我的控制器: backend/modules/content/controllers/ArticleController.php $behaviors['access'] = [ 'class' => AccessControl::className(), 'rules' => [ [ '
backend/modules/content/controllers/ArticleController.php
$behaviors['access'] = [
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'roles' => ['@'],
'matchCallback' => function ($rule, $action) {
$module = Yii::$app->controller->module->id;
$action = Yii::$app->controller->action->id;
$controller = Yii::$app->controller->id;
$route = "$module/$controller/$action";
$post = Yii::$app->request->post();
if (\Yii::$app->user->can($route)) {
return true;
}
}
]
]
];
通过这段代码,我获得了路由(Exm:content/article/index),将对其进行验证,以了解您是否拥有该权限
更新
我注意到问题是在'as globalAccess'
(backend/config/web.php)
中产生的,当我停用全局访问时,它可以验证权限,但当我拥有全局访问权限时,所有用户都有完全访问权限,但禁用它会带来其他问题
'as globalAccess' => [
'class' => common\behaviors\GlobalAccessBehavior::class,
'rules' => [
[
'controllers' => ['sign-in'],
'allow' => true,
'roles' => ['?'],
'actions' => ['login'],
],
[
'controllers' => ['sign-in'],
'allow' => true,
'roles' => ['@'],
'actions' => ['logout'],
],
[
'controllers' => ['site'],
'allow' => true,
'roles' => ['?', '@'],
'actions' => ['error'],
],
[
'controllers' => ['debug/default'],
'allow' => true,
'roles' => ['@'],
],
[
'allow' => true,
'roles' => ['@'],
],
],
],
问题是验证不起作用,唯一有效的方法是在全局访问中添加一条规则,允许我向角色授予权限,但这是默认的:
[
'controllers' => ['article'],
'allow' => true,
'roles' => ['administrator'],
],
[
'controllers' => ['article'],
'allow' => false,
],
或者在每个操作中添加函数Yii::$app->user->can(..)
如果(\Yii::$app->user->can('content/article/index')){
…代码索引。。
}否则{
抛出新的禁止HttpException
}
在理想情况下,您不必为每个操作添加函数
Yii::$app->user->can(…)
,也不必在全局访问中添加默认规则。我希望可以支持我您调试过吗?它是否在应该返回时返回true
?添加返回false代码>最后也是。我已经看到问题是在“as globalAccess”(backend/config/web.php)中产生的,当我禁用全局访问时,您可以验证权限,但当我具有全局访问权限时,所有用户都具有完全访问权限,但禁用它会带来其他问题。