Настройка 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'],
],
],
],
];
}
....

Добавить комментарий