Настройка RBAC для шаблона Yii2 advanced
Для настройки RBAC я буду использовать класс DbManager. Для начала нам необходимо подключить базу данных к своему приложению. В шаблоне advanced для настройки БД используется файл common/config/main-local.php.
<?php return [ 'components' => [ 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=Название вашей базы', 'username' => 'Пользователь базы', 'password' => 'Пароль', 'charset' => 'utf8', ], ... ], ];
Добавляем в файл common/config/main.php подключение через authManager
return [ // ... 'components' => [ 'authManager' => [ 'class' => 'yii\rbac\DbManager', ], // ... ], ];
1. Запускаем командную строку
2. Переходим в корневой каталог
3. Выполняем команду
yii migrate --migrationPath=@yii/rbac/migrations
После выполнения команды в нашей базе будут созданы 4 таблицы для работы с RBAC
- auth_assignment - auth_item - auth_item_child - auth_rule
Добавляем роли и уровни доступа. Я буду использовать миграцию (миграция будет использоваться для добавления необходимых данных в БД). Для создании миграции в командной строке прописываем
yii migrate/create init_rbac
Эта команда создаст файл по адресу console/migrations. Вам необходимо найти файл с окончанием <какие-то цифры>init_rbac.php
Прописываем следующий код в этот файл
<?php use yii\db\Migration; /** * Class m191020_124803_init_rbac */ // У вас будет другое название класса, то которое сгенерировало Yii class m191020_124803_init_rbac extends Migration { /** * {@inheritdoc} */ public function safeUp() { } public function up() { $auth = Yii::$app->authManager; // Добавляем доступ на создание постов $createPost = $auth->createPermission('createPost'); $createPost->description = 'Create a post'; $auth->add($createPost); // Добавляем доступ на обновление постов $updatePost = $auth->createPermission('updatePost'); $updatePost->description = 'Update post'; $auth->add($updatePost); // добавьте роль author и предоставьте этой роли разрешение createPost $author = $auth->createRole('author'); $auth->add($author); $auth->addChild($author, $createPost); // добавить роль «admin» и даем этой роли разрешение «updatePost» // а также все права роли «author» $admin = $auth->createRole('admin'); $auth->add($admin); $auth->addChild($admin, $updatePost); $auth->addChild($admin, $author); // Задаем пользователю с id=1 роль администратора $auth->assign($admin, 1); } public function down() { $auth = Yii::$app->authManager; $auth->removeAll(); } }
Запускаем миграцию в командной строке
yii migrate
После выполнения команды в БД в таблицах создадутся поля.
Применяем уровни доступа к контролеру
Допустим у нас есть контроллер для работы с постами
namespace frontend\controllers; use Yii; use app\models\Post; use app\models\PostSearch; use yii\web\Controller; use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; //Подключаем для работы с ролями AccessControl use yii\filters\AccessControl; /** * PostController implements the CRUD actions for Post model. */ class PostController extends Controller { /** * {@inheritdoc} */ public function behaviors() { return [ 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['POST'], ], ], //Подключаем AccessControl 'access' => [ 'class' => AccessControl::className(), // Указываем методы к которым применяются правила 'only' => ['_form','_search','create', 'index','update', 'view'], 'rules' => [ // Index Доступен для роли author и admin [ 'allow' => true, 'actions' => ['index'], 'roles' => ['author', 'admin'], ], // 'view','_form','_search', 'update','create' доступны только администратору. Если пользователь с ролью author попытается зайти, то он получит сообщение с ошибкой 403 [ 'allow' => true, 'actions' => ['view','_form','_search', 'update','create'], 'roles' => ['admin'], ], ], ], ]; } ....
Добавить комментарий