Как обновить назначение в таблице auth_assignment в Yii2 Rbac?

Я использую RBAC в своем базовом приложении yii2 для назначения модуля пользователям на основе их ролей.

Я храню идентификатор роли и user_id в таблице auth_assignment.

Теперь, если я изменю роль пользователя во время обновления. Я должен изменить это также в таблице auth_assignment. Теперь я хочу удалить все записи этого пользователя из назначения авторизации и добавить новые записи в таблицу.

Проблема в том, что я не могу найти какую-либо функцию RBAC для обновления данных таблицы auth_assignment или для удаления данных таблицы проверки подлинности.

В документации Yii2 есть функция removeAllAssignments() но он усекает всю таблицу, я хочу удалить только записи для пользователя perticular.

Есть ли какая-либо функция для этого?

2 ответа

Решение

Да, есть.

assign () назначает роль пользователю.
revoke () отзывает роль у пользователя.
revokeAll () отзывает все роли у пользователя.

Чтобы получить список всех ролей, назначенных пользователю, вы можете использовать getRolesByUser ().

Предположим, что имя роли отправляется из формы, и вы сохраняете значение в поле «роль», затем добавьте его в свою модель.

Это удалит существующие присвоения и назначит новые.

      public function afterSave($isInsert, $changedOldAttributes)
{

    // Update the user role in the RBAC layer
    // Purge the user tokens when the password is changed
    if (array_key_exists('role', $changedOldAttributes)) {

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

        $auth->revokeAll($this->id );

        $role = $auth->getRole($this->role);

        $auth->assign($role, $this->id);
    }
        return parent::afterSave($isInsert, $changedOldAttributes);
    }
Другие вопросы по тегам