Проблема с присвоением роли при регистрации DBrbac

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Проблема с присвоением роли при регистрации DBrbac

Сообщение alexa777 »

Установил 'yii\rbac\DbManager', все настроил, роли правила и т.д, по лайфхаку которому я делал, указано что присваивать юзеру роль при регистрации надо в модели user с помощью afterSave и это работает отлично.

Код: Выделить всё

    public function afterSave($insert, $changedAttributes) {
        parent::afterSave($insert, $changedAttributes);
        
        $auth = Yii::$app->authManager;
        $user = $auth->getRole('user');
        $auth->assign($user, $this->id);

    }

Проблема вот в чем, сделал редактирование юзера, пароля email и другую инфу и там использую для сохранения $user->save(); И когда я сохраняю изменения, срабатывает afterSave и повторно присваевает роль этому юзеру в базе и выводит ошибку
Integrity constraint violation – yii\db\IntegrityException
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'user-1' for key 'PRIMARY'
The SQL being executed was: INSERT INTO `auth_assignment` (`user_id`, `item_name`, `created_at`) VALUES ('1', 'user', 1538547818)

Error Info: Array
(
[0] => 23000
[1] => 1062
[2] => Duplicate entry 'user-1' for key 'PRIMARY'
)
Как правильно разрулить эту ситуацию, чтобы роль присваивалась толь при регистрации нового юзера?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Проблема с присвоением роли при регистрации DBrbac

Сообщение ElisDN »

Сделать присвоение с SignupForm.
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Проблема с присвоением роли при регистрации DBrbac

Сообщение alexa777 »

ElisDN писал(а): 2018.10.03, 09:51 Сделать присвоение с SignupForm.
Пробовал, но не пойму как правильно сделать, если сделать так

Код: Выделить всё

    public function signup()
    {
        if (!$this->validate()) {
            return null;
        }
        
        $user = new User();
        $user->username = $this->username;
        $user->email = $this->email;
        $user->setPassword($this->password);
        $user->generateAuthKey();
        $auth = Yii::$app->authManager;
        $user = $auth->getRole('user'); 
        $auth->assign($user, $this->id); 

        return $user->save() ? $user : null;
    }
То не получается, выдает ошибку так как id юзеру присваивается только после save
Как сделать правильно? посоветуйте.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Проблема с присвоением роли при регистрации DBrbac

Сообщение ElisDN »

Код: Выделить всё

if ($user->save()) {
    $auth = Yii::$app->authManager;
    $auth->assign($auth->getRole('user'), $this->id);
    return $user;
}
return null;
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Re: Проблема с присвоением роли при регистрации DBrbac

Сообщение alexa777 »

ElisDN писал(а): 2018.10.03, 12:58

Код: Выделить всё

if ($user->save()) {
    $auth = Yii::$app->authManager;
    $auth->assign($auth->getRole('user'), $this->id);
    return $user;
}
return null;
спасибо помогло
Ответить