Ниже будет описан алгоритм создания примера
Примечание: в примере приложение названо
yii2-advanced-rbac
Необходимые зависимости:
Зависимость | Отвечает за --- | --- | --- yiisoft/yii2-app-advanced | шаблон advanced dektrium/yii2-user | управление пользователями githubjeka/gui-rbac-yii2 | графическое представление RBAC mdmsoft/yii2-admin | управление RBAC
Установка шаблона advanced yiisoft/yii2-app-advanced
Для установки шаблона advanced используйте команды
composer create-project --prefer-dist yiisoft/yii2-app-advanced yii2-advanced-rbac
Примечание: подразумевается, что composer установлен глобально, например, следуя инструкции
Дополнительная информация (например, nginx конфиг) доступна в документации
Примечание: Для отправки почты (сообщение о регистрации, восстановление пароля, подтверждение ночты в модуле пользователей) необходимо настроить отправку почты
В файле yii2-advanced-rbac/environments/dev/common/config/main-local.php
укажите настройки transport
либо useFileTransport
<?php
return [
'components' => [
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'mail.youmailserver.com',
'username' => '[email protected]',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
],
];
Важно! Для почтового сервера необходимо привести в соответствие логину (почтовому сервису) адреса отправителей
Необходимо изменть настройку в файле конфигурации
server/environments/dev/common/config/params-local.php
<?php
return [
'adminEmail' => '[email protected]',
];
Для настроек prod
, скорее всего, эти адреса будут различные для разных частей, для этого необходимо
переопределить (либо удалить не отличающиеся от общих) настройки во всех локальных конфигах параметров.
Усли вы используете gmail
- следуя инструкции включите Доступ по протоколу IMAP
. Кроме того на почтовый ящик отправителя прийдёт оповещение о попытке входа из непроверенного приложения. Перейдите по ссылке в этом письме и включите доступ к аккаунту.
Непроверенные приложения
Не все приложения и устройства одинаково надежно защищают ваши данные для входа в аккаунт. Мы рекомендуем запретить непроверенным приложениям доступ к аккаунту. Если вы всё же хотите использовать их, несмотря на риск, то можете дать соответствующее разрешение.
Для работы с примером необходимо создать базу данных. Настройки соединения с этой базой записываются в тот же
yii2-advanced-rbac/environments/dev/common/config/main-local.php
<?php
return [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advancedrbac',
'username' => 'yii2advancedrbac',
'password' => 'enter-password-here',
'charset' => 'utf8',
],
],
];
Выполните скрипт инициализации, окружение "dev". При этом изменённые настройки будут скопированы в соответствующие папки
./init
Установка модуля управления пользователями dektrium/yii2-user
Примечание: миграция будет приведена ниже
Для добавления зависимости выполните из папки приложения
composer require "dektrium/yii2-user:0.9.*@dev"
Добавьте в конфиги модуль user
,
Уберите одноимённый компонент user
, используемый в исходном шаблоне в конфигах
yii2-advanced-rbac/backend/config/main.php
и yii2-advanced-rbac/frontend/config/main.php
Конфигурация yii2-advanced-rbac/common/config/main.php
'modules' => [
'user' => [
'class' => 'dektrium\user\Module',
],
],
Запрет доступа к профилю, восстановлению пароля, регистрации и настройкам своего аккаунта из бекенда: в
yii2-advanced-rbac/backend/config/main.php
добавить:
'modules' => [
'user' => [
// Отключить контроллеры profile, recovery, registration, settings. Остались security, admin
'as backend' => 'dektrium\user\filters\BackendFilter',
],
],
Запрет администрирования с фронтенда: в yii2-advanced-rbac/frontend/config/main.php
добавить:
'modules' => [
'user' => [
// Отключить контроллер admin. Остались profile, recovery, registration, security, settings.
'as frontend' => 'dektrium\user\filters\FrontendFilter',
],
],
Примечание: после установки модуля можно удалить стандартные средства работы с входом: модель, виды:
yii2-advanced-rbac/backend/views/site/login.php
yii2-advanced-rbac/common/models/LoginForm.php
yii2-advanced-rbac/common/models/User.php
yii2-advanced-rbac/frontend/views/site/login.php
yii2-advanced-rbac/frontend/views/site/requestPasswordResetToken.php
yii2-advanced-rbac/frontend/views/site/resetPassword.php
yii2-advanced-rbac/frontend/views/site/signup.php
И изменить ссылки в видах-слоях
yii2-advanced-rbac/backend/views/layouts/main.php
yii2-advanced-rbac/frontend/views/layouts/main.php
Про использование модуля узнайте в соответствующем разделе или в официальной документации
Установка модуля githubjeka/gui-rbac-yii2
Для добавления зависимости выполните из папки приложения
composer require "githubjeka/yii2-gui-rbac:*"
Добавьте в конфиг бэкенда yii2-advanced-rbac/backend/config/main.php
модуль rbac
,
'modules' => [
'rbac' => [
'class' => 'githubjeka\rbac\Module',
],
],
Про использование модуля узнайте в соответствующем разделе или в официальной документации
Установка модуля управления RBAC mdmsoft/yii2-admin
Примечание: миграция будет приведена ниже
Для добавления зависимости выполните из папки приложения
composer require "mdmsoft/yii2-admin:2.x-dev"
Добавьте в общий конфиг yii2-advanced-rbac/common/config/main.php
модуль admin
,
'modules' => [
'admin' => [
'class' => 'mdm\admin\Module',
]
],
Про использование модуля узнайте в соответствующем разделе или в официальной документации
Добавьте конфигурацию компонента приложения rbac
в общий конфиг yii2-advanced-rbac/common/config/main.php
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
Ниже приведён список источников миграций, которые были использованы. Данные пути были добавлены в конфиг консольного приложения
yii2-advanced-rbac/console/config/main.php
'controllerMap' => [
'migrate' => [
'class' => 'yii\console\controllers\MigrateController',
// Since version 2.0.12 an array can be specified for loading migrations from multiple sources.
'migrationPath' => [
'@yii/rbac/migrations/',
'@dektrium/user/migrations',
'@mdm/admin/migrations',
'@app/migrations',
],
],
],
Выполните миграции
./yii migrate/up
При этом вы проведёте инициализацию rbac. Первый пользователь получит права администратора.
Создать пользователя можно тут же, командой
./yii user/create [email protected] login
Вы успешно установили три модуля и инициализировали RBAC, теперь самое время использовать эту систему для ограничения доступа.
Сделать это можно через конфиг, добавляя поведение либо к контролеру, либо к целевому модулю либо к приложению вообще
'modules' => [
'admin' => [
'class' => 'mdm\admin\Module',
'as access' => [
'class' => 'yii\filters\AccessControl',
'rules' => [
[
'allow' => true,
'roles' => ['administrateRbac'],
],
],
],
],
],
Для контроллеров модуля - используя карту контроллеров
'modules' => [
'user' => [
'class' => 'dektrium\user\Module',
'controllerMap' => [
'admin' => [
'class' => 'dektrium\user\controllers\AdminController',
'as access' => [
'class' => 'yii\filters\AccessControl',
'rules' => [
[
'allow' => true,
'roles' => ['administrateUser'],
],
],
],
],
],
],
],
В любом месте - используя конструкцию
yii\web\User::can()