Php 与RBAC Yii 2一起使用访问控制的最佳实践

Php 与RBAC Yii 2一起使用访问控制的最佳实践,php,yii2,yii2-advanced-app,Php,Yii2,Yii2 Advanced App,我在我的应用程序中使用RBAC控件,通常我使用的是Yii::$app->user->can('permission')。 但我有一些问题,当我将访问控制与RBAC相结合时,它不起作用。例如我的代码: public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'ruleConfig' =&g

我在我的应用程序中使用RBAC控件,通常我使用的是
Yii::$app->user->can('permission')
。 但我有一些问题,当我将访问控制与RBAC相结合时,它不起作用。例如我的代码:

public function behaviors() {
    return [
        'access' => [
            'class' => AccessControl::className(),
            'ruleConfig' => [
                'class' => AccessRule::className(),
            ],
            'only' => ['test', 'view', 'index', 'ajaxdatevehicle', 'price_list', 'ajax_suggest_area', 'view-admin'],
            'rules' => [
                [
                    'actions' => ['test', 'view', 'index', 'ajaxdatevehicle', 'price_list', 'ajax_suggest_area', 'view-admin'],
                    'allow' => false,
                    'roles' => [
                        '?',
                    ],
                ],
                [
                    'actions' => ['test', 'view', 'index', 'ajaxdatevehicle', 'price_list', 'ajax_suggest_area', 'view-admin'],
                    'allow' => true,
                    'roles' => [
                        '@',
                    ],
                ],
                [
                    'actions' => ['index'],
                    'allow' => true,
                    'roles' => ['?'],
                ],
                [
                    // This is the problem
                    'actions' => ['view'],
                    'allow' => true,
                    'roles' => [
                        '?',
                        User::ROLE_CUSTOMER,
                        Yii::$app->user->can('customer'),
                    ],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
            ],
        ],
    ];
}
我希望页面“视图”只能由客户访问,那么如何解决这个问题呢

或者最好的做法是什么

这样谢谢你

   [
         // This is the problem
         'actions' => ['view'],
         'allow' => true,
         'roles' => ['customer'],
   ],

这只是我的观点,但我不确定是否每个控制器都加入这样的行为是最好的方法。它看起来有点凌乱,在需要的时候改变一切也不快。我建议您检查此模块。如果您不想使用它(并且想构建自己的rbac系统),您可以测试它,看看它是如何工作的。您不必在控制器中进行任何编辑,只需正确配置所有内容,并在数据库中正确添加权限即可。