dedermus / open-admin-core
Ядро админки для Laravel 13
Requires
- php: ^8.2
- doctrine/dbal: ^4.1
- laravel/framework: >=7.0
- symfony/dom-crawler: ~3.1|~4.0|~5.0|~7.1
Requires (Dev)
- fzaninotto/faker: ~1.4
- intervention/image: ~2.3
- laravel/browser-kit-testing: ^6.0
- laravel/laravel: ^11
- spatie/phpunit-watcher: ^1.22.0
Suggests
- intervention/image: Required to handling and manipulation upload images (~2.3).
- spatie/eloquent-sortable: Required to built orderable gird.
This package is not auto-updated.
Last update: 2026-04-10 12:35:58 UTC
README
⛵open-admin-core - это конструктор административного интерфейса для Laravel, который поможет вам создать CRUD-функции всего с помощью нескольких строк кода.
Данный конструктор является форком проекта https://github.com/open-admin-org/open-admin и адаптирован для Bootstrap 5.3.
Возможности
- ✅ Bootstrap 5.3 — современный адаптивный интерфейс
- ✅ CRUD конструктор — создание админки в несколько строк кода
- ✅ Управление ролями и правами — гибкая система RBAC
- ✅ Восстановление пароля — полный цикл сброса пароля через email
- ✅ AJAX формы — без перезагрузки страницы, с прелоадерами
- ✅ Безопасность — throttle, логирование, принудительный выход из всех устройств
- ✅ Email уведомления — с информацией об IP, времени, браузере и ОС
- ✅ Журнал операций — логирование действий администраторов
- ✅ Расширения — медиа-менеджер, редактор, конструктор страниц и другие
Требования
- PHP ^8.2
- Laravel >= 12.0
- Fileinfo PHP Extension
- База данных: MySQL 8.0+ или PostgreSQL 12+
Установка
1. Создание нового проекта Laravel
composer create-project laravel/laravel example-app
cd example-app
2. Настройка приложения
Отредактируйте файл config/app.php:
'url' => env('APP_URL', null), 'asset_url' => env('ASSET_URL', null), 'timezone' => 'Europe/Moscow', 'locale' => 'ru',
Создайте символическую ссылку для публичных файлов:
php artisan storage:link
3. Настройка базы данных
PostgreSQL (рекомендуется)
В файле .env:
DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 DB_DATABASE=your_database DB_USERNAME=postgres DB_PASSWORD=postgres
Для оптимальной работы установите расширение pg_trgm:
CREATE EXTENSION IF NOT EXISTS pg_trgm;
Проверить наличие расширения:
SELECT extname FROM pg_extension;
MySQL
В файле .env:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database DB_USERNAME=root DB_PASSWORD=root
Для MySQL 8.0+ рекомендуется использовать utf8mb4_unicode_ci:
DB_CHARSET=utf8mb4 DB_COLLATION=utf8mb4_unicode_ci
4. Установка пакета
composer require dedermus/open-admin-core
5. Публикация ресурсов
php artisan vendor:publish --provider="OpenAdminCore\Admin\AdminServiceProvider"
Эта команда опубликует:
- Конфигурацию в
config/admin.php - Языковые файлы в
resources/lang - Миграции в
database/migrations - Ассеты в
public/vendor/open-admin
6. Настройка дисков для загрузки файлов
В файле config/filesystems.php добавьте или обновите диски:
'disks' => [ // ... другие диски 'uploads' => [ 'driver' => 'local', 'root' => public_path('uploads'), 'url' => env('APP_URL').'/uploads', 'visibility' => 'public', 'throw' => false, 'permissions' => [ 'file' => [ 'public' => 0644, 'private' => 0600, ], 'dir' => [ 'public' => 0755, 'private' => 0700, ], ], ], 'admin' => [ 'driver' => 'local', 'root' => public_path('uploads'), 'url' => env('APP_URL').'/uploads', 'visibility' => 'public', 'throw' => false, 'permissions' => [ 'file' => [ 'public' => 0644, 'private' => 0600, ], 'dir' => [ 'public' => 0755, 'private' => 0700, ], ], ], ],
7. Настройка HTTPS (опционально)
В файле config/admin.php:
'https' => env('ADMIN_HTTPS', true),
8. Завершение установки
php artisan admin:install
Эта команда выполнит:
- Запуск всех миграций (
php artisan migrate) - Заполнение таблиц начальными данными (пользователь admin, роли, разрешения)
- Создание директории
app/Adminсо следующей структурой:
app/Admin/
├── Controllers/
│ ├── HomeController.php
│ ├── AuthController.php
│ └── ExampleController.php
├── bootstrap.php
└── routes.php
9. Доступ к админ-панели
Откройте в браузере: http://localhost/admin
Учетные данные по умолчанию:
- Логин:
admin - Пароль:
admin
|⚠️ Важно: После первого входа обязательно смените пароль администратора!
Восстановление пароля
Пакет поддерживает функционал восстановления пароля через email. Для его работы необходимо:
- Настроить отправку email в файле
.env:
MAIL_MAILER=smtp MAIL_HOST=smtp.mail.ru MAIL_PORT=465 MAIL_USERNAME=your-email@example.com MAIL_PASSWORD=your-password MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=your-email@example.com MAIL_FROM_NAME="Admin Panel"
-
Убедиться, что у пользователей заполнен email. Если email отсутствует, пользователь не сможет восстановить пароль.
-
Настроить параметры восстановления в
config/admin.php:
'auth' => [ 'password_reset' => [ 'enabled' => true, // Включить/отключить функционал 'expire' => 60, // Время жизни ссылки (минут) 'throttle' => 3, // Максимум попыток 'throttle_decay_minutes' => 60, // Время блокировки после превышения ], ],
- Настроить логирование в config/logging.php:
'channels' => [ 'password_reset' => [ 'driver' => 'daily', 'path' => storage_path('logs/password-reset.log'), 'level' => 'info', 'days' => 30, ], ],
Процесс восстановления
-
Пользователь нажимает "Забыли пароль?" на странице входа
-
Вводит логин или email
-
На почту приходит ссылка для сброса пароля
-
Пользователь переходит по ссылке и устанавливает новый пароль
-
После успешного сброса:
-
Происходит принудительный выход из всех устройств
-
На почту приходит уведомление с информацией:
-
Время изменения пароля
-
IP-адрес
-
Браузер, ОС и тип устройства
-
-
-
Пользователь перенаправляется на страницу входа
Безопасность
✅ Ограничение количества попыток (throttle)
✅ Токены сброса имеют ограниченное время жизни
✅ Общие сообщения об успехе (не сообщаем, существует ли пользователь)
✅ Логирование всех попыток в отдельный канал
✅ Принудительный выход из всех устройств после сброса
✅ Email-уведомление с информацией об IP и устройстве
✅ AJAX-отправка форм с защитой от двойной отправки
- Очистка устаревших токенов:
php artisan admin:clear-resets
Рекомендуется добавить эту команду в расписание (cron):
// app/Console/Kernel.php protected function schedule(Schedule $schedule) { $schedule->command('admin:clear-resets')->daily(); }
Процесс восстановления пароля
- Пользователь нажимает "Забыли пароль?" на странице входа
- Вводит логин или email
- Если учетная запись существует и имеет email, отправляется ссылка на сброс
- Пользователь переходит по ссылке и устанавливает новый пароль
- После успешного сброса выполняется перенаправление на страницу входа
Безопасность
- Ограничение количества попыток (throttle)
- Токены сброса имеют ограниченное время жизни
- Общие сообщения об успехе (не сообщаем, существует ли пользователь)
- Логирование всех попыток в отдельный канал
- Пароль должен соответствовать требованиям безопасности (минимум 8 символов)
Конфигурация
Основные настройки находятся в файле config/admin.php:
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
directory |
Директория админки | app/Admin |
route.prefix |
Префикс маршрутов | admin |
database.users_table |
Таблица пользователей | admin_users |
database.roles_table |
Таблица ролей | admin_roles |
database.permissions_table |
Таблица разрешений | admin_permissions |
database.menu_table |
Таблица меню | admin_menu |
database.operation_log_table |
Журнал операций | admin_operation_log |
Команды админ-панели
Пакет предоставляет набор Artisan-команд для управления админ-панелью:
| Команда | Описание |
|---|---|
php artisan admin |
Список всех доступных команд |
php artisan admin:install |
Установка админ-панели |
php artisan admin:uninstall |
Удаление админ-панели |
php artisan admin:create-user |
Создание нового пользователя |
php artisan admin:reset-password |
Сброс пароля пользователя |
php artisan admin:make {model} |
Генерация контроллера для модели |
php artisan admin:form {name} |
Генерация виджета формы |
php artisan admin:action {name} |
Генерация действия |
php artisan admin:permissions |
Генерация разрешений на основе таблиц |
php artisan admin:generate-menu |
Генерация меню на основе маршрутов |
php artisan admin:menu |
Вывод структуры меню |
php artisan admin:config |
Сравнение конфигурации с оригиналом |
php artisan admin:minify |
Минификация CSS и JS ассетов |
php artisan admin:extend {extension} |
Создание расширения |
php artisan admin:import {extension} |
Импорт расширения |
php artisan admin:dev-links |
Создание символических ссылок для разработки |
php artisan admin:publish |
Публикация ресурсов |
Примеры использования команд
Создание контроллера для модели Post:
php artisan admin:make "App\Models\Post" --title="Статьи"
После выполнения команды будет создан контроллер app/Admin/Controllers/PostController.php с готовыми методами для CRUD операций.
Добавление маршрута в app/Admin/routes.php:
$router->resource('posts', PostController::class);
Генерация разрешений для таблицы posts:
php artisan admin:permissions --tables=posts
Обновление
Обновление до новой версии пакета:
composer update dedermus/open-admin-core php artisan vendor:publish --tag=open-admin-assets --force php artisan view:clear php artisan config:clear
Расширения
Пакет поддерживает расширения, адаптированные для Bootstrap 5.3:
| Расширение | Описание |
|---|---|
| helpers | Инструменты для разработки |
| media-manager | Управление файлами |
| config | Менеджер конфигурации |
| grid-sortable | Сортируемые таблицы |
| Ckeditor | Визуальный редактор |
| api-tester | Тестирование API |
| scheduling | Управление задачами |
| phpinfo | Информация о PHP |
| log-viewer | Просмотр логов |
| page-designer | Конструктор страниц |
| reporter | Отчеты об ошибках |
| redis-manager | Управление Redis |
Установка расширения
composer require dedermus/helpers php artisan admin:import helpers
Локализация
| № | Код | Язык | RTL |
|---|---|---|---|
| 1 | en | Английский | ❌ |
| 2 | ru | Русский | ❌ |
| 3 | uk | Украинский | ❌ |
| 4 | de | Немецкий | ❌ |
| 5 | es | Испанский | ❌ |
| 6 | fr | Французский | ❌ |
| 7 | zh_CN | Китайский (упрощённый) | ❌ |
| 8 | zh_TW | Китайский (традиционный) | ❌ |
| 9 | pl | Польский | ❌ |
| 10 | it | Итальянский | ❌ |
| 11 | ja | Японский | ❌ |
| 12 | pt | Португальский | ❌ |
| 13 | pt-BR | Португальский (Бразилия) | ❌ |
| 14 | tr | Турецкий | ❌ |
| 15 | nl | Нидерландский | ❌ |
| 16 | id | Индонезийский | ❌ |
| 17 | ms | Малайский | ❌ |
| 18 | ko | Корейский | ❌ |
| 19 | he | Иврит | ✅ |
| 20 | fa | Персидский (фарси) | ✅ |
| 21 | bn | Бенгальский | ❌ |
| 22 | az | Азербайджанский | ❌ |
| 23 | ar | Арабский | ✅ |
Поддержка RTL (справа налево)
Для поддержки языков с направлением письма справа налево:
-
Откройте файл
vendor/dedermus/open-admin-core/src/Traits/HasAssets.php -
В массиве
$baseCssзамените:bootstrap.min.css→bootstrap.rtl.min.cssAdminLTE.min.css→AdminLTE.rtl.min.css
Устранение неполадок
Проблема: Class "OpenAdminCore\Admin\AdminServiceProvider" not found
Решение: Запустите composer dump-autoload:
composer dump-autoload
Проблема: Ошибка при миграции с PostgreSQL
Решение: Убедитесь, что установлено расширение pg_trgm:
CREATE EXTENSION IF NOT EXISTS pg_trgm;
Проблема: Ошибка 404 при доступе к админке
Решение: Проверьте файл app/Admin/routes.php и убедитесь, что префикс маршрутов в config/admin.php совпадает с URL.
Лицензия
open-admin-core распространяется под лицензией The MIT License (MIT).