Процесс работы RBAC в Yii 2 очень простой. Хочу заметить что разница между DbManager и PhpManager одна, место хранения данных. Первый хранит данные в БД, второй в ПХП файлах. все остальное это один интерфейс, с разной реализацией.
Для того чтобы начать работу с RBAC (любым) нужно:
- Сконфигурировать "authManager" в своем конфиг файле.
- Если выбран метод хранения в БД, то нужно запустить
миграции для создания нужных таблиц, или воспользоваться готовым
дампом.
- Завести таблицу с пользователями, структура может быть любой, и никаких спец требований у самого RBAC тут нет. Главное что есть "PrimaryKey"/
- Создать свой список ролей. Легче всего для это-го можно использовать API, пример создания обычных правил можно посмотреть
тут например. В данном примере создание самих ролей было отделено в свой консольный контроллер, для удобства. Данное действие делается один раз. Конечно если нужны дополнительные роли то пишем другие экшены и добавляем их по необходимости. Думаю описывать методы не стоит, так как там все интуитивно понятно.
- После того как у нас есть таблица с пользователями, и есть наши таблицы с заполненными правилами, осталось только сделать присваивание. Присваивать роли пользователю обычно нужно при регистрации. Вернее после сохранения нового пользователя делается присваивание его роли: живой пример
тут:
Код: Выделить всё
$auth = Yii::$app->authManager; // Создаём экземпляр менеджера
/*
Определяем название роли.
В данном примере поле "role" содержит название роли что-то типа: "admin" или "moderator", эти названия уже есть в БД,
и были созданы через API что в пунтке выше.
*/
$name = $this->role ? $this->role : self::ROLE_DEFAULT;
$role = $auth->getRole($name); // Находим нашу роль в базе, по его названию.
if (!$insert) { // Проверяем если это не первое сохранение
$auth->revokeAll($this->id); // Если это обновление записи, то удаляем все права и роли нашего пользователя, так как мы ему присваиваем новые.
}
/*
Само присваивание роли.
$this->id тут является ИД-шником пользователя, хотя у вас это может быть что-то другое.
То есть ваш "PrimaryKey".
*/
$auth->assign($role, $this->id);
- Процесс прикрутки РБАК окончен. При обновлении делается тоже самое, и в примере выше это уже учтено. Теперь все что осталось это использовать проверки в нужных местах, типа такого:
Код: Выделить всё
if (Yii::$app->user->can('admin')) { // "admin" является названием роли которое было создано через API "authManger"-а.
echo 'Hello, Admin!'
}
Вроде все, если есть еще вопросы, задавайте.