Ошибка Yii2 RBAC DbManager Вызов функции-члена getRole() при нулевом значении

Я настроил базу данных и т. д., реализовав код SQL для настройки таблиц и сценарий rbac/init для заполнения ролей/разрешений.

У меня есть assign() при создании пользователя, но я продолжаю получать эту ошибку в getRole():

yii\base\ErrorException Вызов функции-члена getRole() при нулевом значении

   public function addUser()
{
    if($this->validate()) {
        $user = new User();
        $auth_key = Yii::$app->getSecurity()->generateRandomString(32);
        $this->password = Yii::$app->getSecurity()->generatePasswordHash($this->password);

        $user->email = $this->email;
        $user->password = $this->password;
        $user->active = $this->active;
        $user->firstname = $this->firstname;
        $user->lastname = $this->lastname;
        // $user->nickname = $this->nickname;
        $user->datecreated = time();
        $user->auth_key = $auth_key;
        $user->save(false);

        $auth = Yii::$app->authManager;
        $authorRole = $auth->getRole($this->role);
        $auth->assign($authorRole, $user->getId());

        return $user;
    }else{
        return false;
    }
}

переменная $role передается через $_POST вместе с другими атрибутами пользователя.

Пожалуйста помоги. Спасибо.


person Daniel O'Leary    schedule 10.11.2014    source источник


Ответы (2)


Вы ошиблись.

Проблема здесь, похоже, в том, что Yii::$app->authManager не установлен, когда должен быть. Вероятно, это означает, что ваш конфигурационный файл main.php содержит неправильную информацию. Он должен содержать следующий компонент:

return [
    // ...
    'components' => [
        'authManager' => [
            'class' => 'yii\rbac\DbManager',
        ],
        // ...
    ],
];

(http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#configuring-rbac-manager)

В примере из приведенной выше ссылки используется PhpManager, но в вашем случае вы захотите использовать yii\rbac\DbManager

Это означает, что у вас будет только один загруженный менеджер, а также будут разблокированы все параметры фильтрации действий.

person Pomme.Verte    schedule 13.11.2014

Кажется, я исправил это, заменив

$auth = Yii::$app->authManager;

с участием

$auth = new DbManager;

Дайте мне знать, если это неправильный способ сделать это!

person Daniel O'Leary    schedule 11.11.2014