VirmarY
@VirmarY
Full-stack web developer

Роль пользователя при регистрации (RBAC). Как правильно сделать?

Есть Yii2 Advanced Template. Для удобства работы с RBAC взят модуль yii2-admin. authManager задан как:
'authManager' => [
            'class' => 'yii\rbac\DbManager',
]

Для простоты задано в common\config\params.php:
'defaultRole' => 'User'.
Собственно по оф. доке при регистрации показан код, который нужно разместить в методе signup модули SignupForm. С моим небольшим изменением получается так:
...
if ($user->save()) {
    $auth = Yii::$app->authManager;
    $defaultRole = $auth->getRole(Yii::$app->params['defaultRole']);
    $auth->assign($defaultRole, $user->getId());

    return $user;
}


Собственно вопросы.
1) Правильно ли так задавать роль по умолчанию? Может есть "right way"?
2) Я правильно понимаю, что добавлять роль пользователю лучше через afterSave в модели пользователя?
3) Можно ли вызывать afterSave только для метода signup в SignupForm?

P.S. Yii вижу в глаза 4 день. Просьба сильно не пинать, если что-то не так.
  • Вопрос задан
  • 858 просмотров
Решения вопроса 1
Demetriy
@Demetriy
веб и мобильная разработка
1) За это не скажу.

2) Да, но для перестраховки можете сделать это все еще транзакцией, на случай, когда пользователь добавился, а права по какой-то причине не добавились., т.е. после успешного добавления пользователя, добавляем права и, если произошла ошибка, то откат транзакции.

3)
public function afterSave($insert, $changedAttributes)
    {
        parent::afterSave($insert, $changedAttributes);

        if($insert) {
            $auth = Yii::$app->authManager;
            $role = $auth->getRole(self::ROLE_USER);
            $auth->assign($role, $this->id);
        }

        Yii::$app->authManager->invalidateCache();
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы