Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问代码不工作,用于检查用户是否具有权限-RBAC Yii2_Yii2_Rbac - Fatal编程技术网

访问代码不工作,用于检查用户是否具有权限-RBAC Yii2

访问代码不工作,用于检查用户是否具有权限-RBAC Yii2,yii2,rbac,Yii2,Rbac,我在验证用户对控制器内的操作(Exm:索引、创建、更新等)的权限时遇到问题,我使用以下代码验证用户的权限: 我的控制器: backend/modules/content/controllers/ArticleController.php $behaviors['access'] = [ 'class' => AccessControl::className(), 'rules' => [ [ '

我在验证用户对控制器内的操作(Exm:索引、创建、更新等)的权限时遇到问题,我使用以下代码验证用户的权限:

我的控制器:

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)中产生的,当我禁用全局访问时,您可以验证权限,但当我具有全局访问权限时,所有用户都具有完全访问权限,但禁用它会带来其他问题。