2016-02-16 3 views
1

В моем исходном коде у меня есть этот код для проверки, есть ли у пользователя разрешения. Для этого я использую RBAC. В моем контроллере, у меня есть это:Rbac ошибка проверки разрешения Yii2

public function behaviors() 
{ 
    $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; 
        } else { 
         Yii::$app->session->setFlash('error', 'Your user does not have access to this module.'); 
         return $this->redirect('dashboard'); 
        } 
       } 
      ], 
     ], 
    ];   
    return $behaviors; 

} 

Моя проблема, когда я использую функцию

if (\Yii::$app->user->can($route)) { .... 

Yii отображает следующее сообщение об ошибке:

PHP Warning – yii\base\ErrorException 
in_array() expects parameter 2 to be array, string given .... 
........ 
in /lxcshared/yii-develop/sacyii.git/vendor/yiisoft/yii2/rbac/DbManager.php at line 196 
........ 
    if (isset($assignments[$itemName]) || in_array($itemName, $this->defaultRoles)) { 
     return true; 
    } 

Я следую этим рекомендациям Role Based Access Control (RBAC), но я не знаю, почему у меня эта проблема.

ответ

2

Проверьте конфигурацию authManager->defaultRoles. Это должен быть массив.

'authManager' => [ 
    ... 
    'defaultRoles' => [...] 
] 
+0

Спасибо @Misbahul, это моя ошибка ... – Ale

Смежные вопросы