Как обновить назначение в таблице 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);
}