larikmc / yii2-admin
Unified admin module for Yii2 backend with dashboard, auth and RBAC
Requires
- php: >=8.1
- yiisoft/yii2: ~2.0
- yiisoft/yii2-bootstrap5: ~2.0
This package is auto-updated.
Last update: 2026-03-30 10:06:03 UTC
README
Готовое расширение для Yii2 backend: одна установка, один модуль admin, внутри уже есть:
- dashboard и общий layout админки
- авторизация и страница входа
- RBAC: роли, действия и назначения
- security log
- очистка кеша
- системный bootstrap для
admin,adminPanelи пользователяID=1
Пакет рассчитан на сценарий, где админка, auth и RBAC живут вместе как единая backend-платформа.
Требования
- PHP 8.1+
- Yii2 2.0.x
yiisoft/yii2-bootstrap5authManager=yii\rbac\DbManager
Что дает пакет
После подключения у вас есть:
/admin/admin/login/admin/auth/security-log/admin/rbac/admin/rbac/user/admin/rbac/role/admin/rbac/permission/admin/rbac/assignment
Внутри RBAC уже поддержана схема:
действия -> роли -> пользователи
То есть:
- создаете действия
- включаете действия в роль
- назначаете роль пользователю
Установка
Composer
composer require larikmc/yii2-admin
Для локального path-пакета:
{
"repositories": [
{
"type": "path",
"url": "../yii2-admin",
"options": {
"symlink": true,
"relative": true
}
}
],
"require": {
"larikmc/yii2-admin": "@dev"
}
}
Базовая конфигурация backend
Пример для backend/config/main.php:
'defaultRoute' => 'admin/site/index', 'layout' => '@larikmc/admin/views/layouts/main', 'modules' => [ 'admin' => [ 'class' => larikmc\admin\Module::class, 'userClass' => common\models\User::class, 'userModel' => common\models\User::class, 'userIdField' => 'id', 'usernameField' => 'username', 'emailField' => 'email', 'statusField' => 'status', 'rbacAccessRoles' => [], // Настройки авторизации 'maxUserAttempts' => 5, 'captchaAfterAttempts' => 3, 'lockDuration' => 120, 'userAttemptsTtl' => 120, 'maxDelaySeconds' => 10, ], ], 'components' => [ 'request' => [ 'baseUrl' => '/admin', ], 'user' => [ 'identityClass' => common\models\User::class, 'enableAutoLogin' => true, 'loginUrl' => ['/auth/login'], ], 'authManager' => [ 'class' => yii\rbac\DbManager::class, ], 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ '' => 'admin/site/index', 'login' => 'admin/auth/auth/login', 'auth/login' => 'admin/auth/auth/login', 'auth/logout' => 'admin/auth/auth/logout', 'auth/captcha' => 'admin/auth/auth/captcha', 'auth/security-log' => 'admin/auth/auth/security-log', 'auth/clear-security-log' => 'admin/auth/auth/clear-security-log', 'rbac' => 'admin/rbac/default/index', 'rbac/<controller:[\w-]+>' => 'admin/rbac/<controller>/index', 'rbac/<controller:[\w-]+>/<action:[\w-]+>' => 'admin/rbac/<controller>/<action>', ], ], ],
Схема доступа
Рекомендуемая схема разделения доступа:
adminPanelдает право войти в админкуadminдает доступ к рабочим backend-контроллерам и административным разделам
То есть:
- пользователь без
adminPanelне должен попадать в/admin - пользователь с
adminPanel, но безadmin, может пройти только уровень входа в админку - backend-контроллеры, dashboard, RBAC и security log должны быть закрыты ролью
admin
Security Model
Матрица доступа по умолчанию:
adminPanel— право пройти в/adminadmin— право работать с backend-контроллерамиadmin— право видеть dashboard и внутренние admin-страницыadmin— право работать с RBACadmin— право просматривать и очищать security log
Коротко:
adminPanel= вход в админкуadmin= вся рабочая часть админки
Меню
Основное меню и нижнее меню задаются через:
menusecondaryMenu
Пример:
'modules' => [ 'admin' => [ 'class' => larikmc\admin\Module::class, 'userClass' => common\models\User::class, 'userModel' => common\models\User::class, 'menu' => [ [ 'icon' => 'dashboard', 'label' => 'Панель управления', 'url' => ['/admin/site/index'], ], [ 'icon' => 'admin_panel_settings', 'label' => 'Администрирование', 'items' => [ ['label' => 'RBAC', 'url' => ['/rbac/default/index']], ['label' => 'Security Log', 'url' => ['/auth/security-log']], ], ], ], 'secondaryMenu' => [ [ 'icon' => 'restart_alt', 'label' => 'Очистить кеш', 'url' => ['/admin/site/clear-cache'], 'method' => 'post', ], [ 'icon' => 'logout', 'label' => 'Выйти', 'url' => ['/auth/logout'], 'method' => 'post', ], ], ], ],
Авторизация
В пакет уже встроен модуль авторизации:
- форма входа
- brute-force защита
- CAPTCHA после нескольких попыток
- lock по IP и email
- security log
Маршруты:
GET/POST /admin/auth/loginPOST /admin/auth/logoutGET /admin/auth/captchaGET /admin/auth/security-logPOST /admin/auth/clear-security-log
Внутри пакета используются короткие маршруты /auth/*, поэтому их нужно пробросить через urlManager.
RBAC
В пакет уже встроен RBAC-раздел:
- роли
- действия
- назначения ролей пользователям
Маршруты:
/admin/rbac/admin/rbac/user/admin/rbac/role/admin/rbac/permission/admin/rbac/assignment
Системные элементы
При установке RBAC автоматически создаются:
- роль
admin - действие
adminPanel - связь
admin -> adminPanel - назначение роли
adminпользователюID=1
Системные инварианты:
- пользователь с
ID=1является системным администратором и не может быть лишен ролиadmin - роль
adminявляется системной и не может быть удалена - действие
adminPanelявляется системным и не может быть удалено - связь
admin -> adminPanelдолжна существовать всегда - у пользователя с
ID=1рольadminдолжна сохраняться всегда
Связь системных прав:
adminPanelсчитается системным permission для входа в админку- роль
adminдолжна включатьadminPanel - назначение только
adminPanelбез ролиadminможно использовать как технический допуск на уровень входа, но не как доступ к backend-разделам
Общий контейнер страниц
В пакет встроен виджет:
larikmc\admin\widgets\AdminPage
Он нужен для единообразных внутренних страниц модулей. Его можно использовать и в собственных admin-разделах.
Пример:
echo \larikmc\admin\widgets\AdminPage::widget([ 'title' => 'Моя страница', 'subtitle' => 'Короткое описание раздела', 'actions' => [ \yii\bootstrap5\Html::a('Создать', ['create'], ['class' => 'btn btn-success']), ], 'content' => '<div>Контент страницы</div>', ]);
sz-panel
Базовый визуальный контейнер админки:
.sz-panel
Он задает:
- белый фон
- внутренние отступы
- скругление
- тень карточки
Используйте его для списков, форм, таблиц и detail-экранов, если нужен единый стиль панели.
Пример ручного использования:
<div class="sz-panel">
<?= \yii\grid\GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => $columns,
]) ?>
</div>
Или для формы:
<div class="sz-panel">
<?= $this->render('_form', ['model' => $model]) ?>
</div>
Если страница строится через AdminPage, панель можно получить автоматически:
echo \larikmc\admin\widgets\AdminPage::widget([ 'title' => 'Список товаров', 'content' => \yii\grid\GridView::widget([...]), ]);
По умолчанию AdminPage оборачивает контент в .sz-panel.
Если панель нужна вручную в самом шаблоне, отключите автообертку:
echo \larikmc\admin\widgets\AdminPage::widget([ 'title' => 'Журнал безопасности', 'boxed' => false, 'content' => '<div class="sz-panel">...</div>', ]);
Плоский вариант без карточки:
.sz-panel--flat
Структура пакета
yii2-admin/
├─ src/
│ ├─ assets/
│ ├─ auth/
│ ├─ config/
│ ├─ controllers/
│ ├─ rbac/
│ ├─ views/
│ ├─ web/
│ ├─ widgets/
│ └─ Module.php
├─ composer.json
└─ README.md
Идея пакета
Это не набор из трех независимых расширений, а одна backend-платформа:
admin shellauthrbac
Именно поэтому пакет удобнее ставить и поддерживать как одно расширение.
Лицензия
BSD-3-Clause