用于独立操作的AccesControl过滤器

时间:2017-03-01 15:08:18

标签: php yii2

我正在使用AccessControl和matchCallback这样的

        'access' => [
        'class' => \yii\filters\AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'roles' => ['@'],
                    'matchCallback' => function ($rule, $action) {
                        $action = yii::$app->controller->action->id;
                        $controller = yii::$app->controller->id;
                        $route = "$controller/$action";
                        if (Yii::$app->user->can($route)) {
                            return true;
                        }
                    }
                ]
        ]
    ]

我对RBAC的所有权限都是这样创建的 - 控制器/操作,这适用于内联操作,但不适用于这样的独立操作:

 public function actions()
    {
        return [
            'cbaccept' => [
                'class' => ToggleAction::className(),
                'modelClass' => 'app\models\base\Drawing',
                'attribute'=>'cbaccepted',
            ],

如何检查matchCallback中的独立操作?

1 个答案:

答案 0 :(得分:0)

您确定它不适用于独立操作吗?它应该。

你的回调可以更简单:

'matchCallback' => function ($rule, $action) {
    $route = $action->controller->id . '/' . $action->id;
    return Yii::$app->user->can($route);
}