| Current Path : /var/www/html/reddsis/database/seeders/ |
| Current File : /var/www/html/reddsis/database/seeders/BackendMenuSeeder.php |
<?php
namespace Database\Seeders;
use App\Models\Backend\menu\backend\Menu;
use App\Models\Backend\menu\backend\RoleMapping;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Cache;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;
class BackendMenuSeeder extends Seeder
{
public function run(): void
{
$role = Role::findOrCreate('super-admin', 'admin');
$permissions = [
'backend-user.view',
'backend-menu.view',
'backend-menu.create',
'backend-menu.update',
'backend-menu.delete',
'backend-menu.roledelete',
'backend-menu.assign',
'backend-menu.level',
'backend-menu.disabled',
'activity-log.view',
'auto-permission.view',
'auto-permission.create',
'ref.view',
'role.view',
'permission.view',
'permission.create',
'frontend-user.view',
'frontend-user.create',
'frontend-user.update',
'frontend-user.delete',
'file.view',
'frontend-menu.view',
'frontend-menu.create',
'frontend-menu.update',
'frontend-menu.delete',
'frontend-menu.assign',
'frontend-menu.level',
'frontend-menu.disabled',
'menu-category.view',
'menu-category.create',
'menu-category.update',
'menu-category.delete',
'content-article.view',
'content-article.create',
'content-article.update',
'content-article.delete',
'content-application.view',
'content-application.create',
'content-application.update',
'content-application.delete',
'content-download.view',
'content-download.create',
'content-download.update',
'content-download.delete',
'content-photo-gallery.view',
'content-photo-gallery.create',
'content-photo-gallery.update',
'content-photo-gallery.delete',
'content-photo-list.view',
'content-photo-list.create',
'content-photo-list.update',
'content-photo-list.delete',
'content-slider.view',
'content-slider.create',
'content-slider.update',
'content-slider.delete',
'content-image.view',
'content-image.create',
'content-image.update',
'content-image.delete',
'content-video.view',
'content-video.create',
'content-video.update',
'content-video.delete',
'content-feedback.view',
'content-feedback.create',
'content-feedback.update',
'content-feedback.delete',
'content-feedback.export',
'content-public-holiday.view',
'content-public-holiday.create',
'content-public-holiday.update',
'content-public-holiday.delete',
'content-calendar.view',
'content-calendar.create',
'content-calendar.update',
'content-calendar.delete',
'content-directory-department.view',
'content-directory-department.create',
'content-directory-department.update',
'content-directory-department.delete',
'content-directory-staff.view',
'content-directory-staff.create',
'content-directory-staff.update',
'content-directory-staff.delete',
'route.view',
'route.create',
'route.update',
'route.delete',
'visitor.view',
'visitor.update',
'visitor.delete',
'theme-rule.view',
'theme-rule.create',
'theme-rule.update',
'theme-rule.delete',
'theme-setting.view',
'theme-setting.update',
'data-dashboard.view',
'data-dashboard.create',
'data-dashboard.update',
'data-dashboard.delete',
'frontend-site.view',
'frontend-site.create',
'frontend-site.update',
'frontend-site.delete',
'artisangen.view',
];
foreach ($permissions as $permission) {
Permission::findOrCreate($permission, 'admin');
}
app(PermissionRegistrar::class)->forgetCachedPermissions();
$role->givePermissionTo($permissions);
$home = $this->menu('Home', 'admin.home', 'fa-solid fa-house', ['admin.home']);
$backend = $this->menu('Backend', '#', 'fa-solid fa-gears', [
'backend-user.index',
'backend-user.create',
'backend-user.edit',
'roles.index',
'roles.create',
'roles.edit',
'permissions.index',
'permissions.create',
'permissions.edit',
'auto-permissions.index',
'admin.routes.index',
'admin.routes.create',
'admin.routes.edit',
'backend-menu.index',
'backend-menu.create',
'backend-menu.edit',
'backend-menu.assign',
'ref.index',
'ref.create',
'ref.edit',
'activity-log.index',
'visitor.index',
'setting.index',
'artisangen.index',
]);
$backendUser = $this->menu('User', 'backend-user.index', 'fa-solid fa-user-gear', ['backend-user.index', 'backend-user.create', 'backend-user.edit'], $backend->menu_id);
$this->menu('Parameters', 'ref.index', 'fa-solid fa-gear', ['ref.index', 'ref.create', 'ref.edit'], $backend->menu_id);
$rolesPermissions = $this->menu('Roles & Permissions', '#', 'fa-solid fa-user-lock', [
'roles.index',
'roles.create',
'roles.edit',
'permissions.index',
'permissions.create',
'permissions.edit',
'auto-permissions.index',
], $backend->menu_id);
$this->menu('Roles', 'roles.index', 'fa-solid fa-users-gear', ['roles.index', 'roles.create', 'roles.edit'], $rolesPermissions->menu_id);
$this->menu('Permissions', 'permissions.index', 'fa-solid fa-shield-halved', ['permissions.index', 'permissions.create', 'permissions.edit'], $rolesPermissions->menu_id);
$this->menu('Auto Permissions', 'auto-permissions.index', 'fa-solid fa-robot', ['auto-permissions.index'], $rolesPermissions->menu_id);
$this->menu('Routes', 'admin.routes.index', 'fa-solid fa-route', ['admin.routes.index', 'admin.routes.create', 'admin.routes.edit'], $backend->menu_id);
$this->menu('Menu', 'backend-menu.index', 'fa-solid fa-bars', ['backend-menu.index', 'backend-menu.create', 'backend-menu.edit'], $backend->menu_id);
$this->menu('Assign Menu', 'backend-menu.assign', 'fa-solid fa-right-left', ['backend-menu.assign'], $backend->menu_id);
$dataDashboard = $this->menu('Dashboard', 'data-dashboard.index', 'fa-solid fa-chart-simple', ['data-dashboard.index', 'data-dashboard.create', 'data-dashboard.edit'], $backend->menu_id);
$this->menu('Activity Log', 'activity-log.index', 'fa-solid fa-clock-rotate-left', ['activity-log.index'], $backend->menu_id);
$this->menu('Visitor', 'visitor.index', 'fa-solid fa-eye', ['visitor.index'], $backend->menu_id);
$theme = $this->menu('Theme', '#', 'fa-solid fa-palette', [
'theme-setting.index',
'theme-setting.save',
'theme-rule.index',
'theme-rule.create',
'theme-rule.edit',
], $backend->menu_id);
$this->menu('Theme Settings', 'theme-setting.index', 'fa-solid fa-sliders', ['theme-setting.index', 'theme-setting.save'], $theme->menu_id);
$this->menu('Theme Rules', 'theme-rule.index', 'fa-solid fa-code', ['theme-rule.index', 'theme-rule.create', 'theme-rule.edit'], $theme->menu_id);
$moduleGenerator = $this->menu('Module Generator', 'artisangen.index', 'fa-solid fa-wand-magic-sparkles', ['artisangen.index', 'artisangen.migration', 'artisangen.model', 'artisangen.crud'], $backend->menu_id);
$frontend = $this->menu('Frontend', '#', 'fa-solid fa-globe', [
'frontend-user.index',
'frontend-user.create',
'frontend-user.edit',
'file-manager.index',
'frontend-site.sites.index',
'frontend-site.sites.create',
'frontend-site.sites.edit',
'frontend-site.components.index',
'frontend-site.components.create',
'frontend-site.components.edit',
'frontend-menu.index',
'frontend-menu.create',
'frontend-menu.edit',
'frontend-menu.assign',
]);
$frontendUser = $this->menu('User', 'frontend-user.index', 'fa-solid fa-user', ['frontend-user.index', 'frontend-user.create', 'frontend-user.edit'], $frontend->menu_id);
$this->menu('Assets', 'file-manager.index', 'fa-solid fa-folder-open', ['file-manager.index'], $frontend->menu_id);
$this->menu('Sites', 'frontend-site.sites.index', 'fa-solid fa-globe', ['frontend-site.sites.index', 'frontend-site.sites.create', 'frontend-site.sites.edit', 'frontend-site.pages.index', 'frontend-site.pages.create', 'frontend-site.pages.edit'], $frontend->menu_id);
$this->menu('Components', 'frontend-site.components.index', 'fa-solid fa-puzzle-piece', ['frontend-site.components.index', 'frontend-site.components.create', 'frontend-site.components.edit'], $frontend->menu_id);
$frontendMenu = $this->menu('Menu', 'frontend-menu.index', 'fa-solid fa-bars', ['frontend-menu.index', 'frontend-menu.create', 'frontend-menu.edit', 'menu-category.index', 'menu-category.create', 'menu-category.edit'], $frontend->menu_id);
$frontendAssign = $this->menu('Assign Menu', 'frontend-menu.assign', 'fa-solid fa-right-left', ['frontend-menu.assign'], $frontend->menu_id);
$content = $this->menu('Content', '#', 'fa-solid fa-layer-group', [
'content-article.index',
'content-article.create',
'content-article.edit',
'content-application.index',
'content-application.create',
'content-application.edit',
'content-download.index',
'content-download.create',
'content-download.edit',
'content-photo-gallery.index',
'content-photo-gallery.create',
'content-photo-gallery.edit',
'content-photo-list.index',
'content-photo-list.create',
'content-photo-list.edit',
'content-slider.index',
'content-slider.create',
'content-slider.edit',
'content-image.index',
'content-image.create',
'content-image.edit',
'content-video.index',
'content-video.create',
'content-video.edit',
'content-feedback.index',
'content-feedback.create',
'content-feedback.edit',
'content-feedback.export',
'content-public-holiday.index',
'content-public-holiday.create',
'content-public-holiday.edit',
'content-calendar.index',
'content-calendar.create',
'content-calendar.edit',
'content-directory-department.index',
'content-directory-department.create',
'content-directory-department.edit',
'content-directory-staff.index',
'content-directory-staff.create',
'content-directory-staff.edit',
]);
$this->menu('Articles', 'content-article.index', 'fa-solid fa-newspaper', ['content-article.index', 'content-article.create', 'content-article.edit'], $content->menu_id);
$this->menu('Links', 'content-application.index', 'fa-solid fa-link', ['content-application.index', 'content-application.create', 'content-application.edit'], $content->menu_id);
$this->menu('Documents', 'content-download.index', 'fa-solid fa-file-lines', ['content-download.index', 'content-download.create', 'content-download.edit'], $content->menu_id);
$this->menu('Photo Galleries', 'content-photo-gallery.index', 'fa-solid fa-images', ['content-photo-gallery.index', 'content-photo-gallery.create', 'content-photo-gallery.edit', 'content-photo-list.index', 'content-photo-list.create', 'content-photo-list.edit'], $content->menu_id);
$this->menu('Slider Images', 'content-slider.index', 'fa-solid fa-sliders', ['content-slider.index', 'content-slider.create', 'content-slider.edit'], $content->menu_id);
$this->menu('Images', 'content-image.index', 'fa-solid fa-image', ['content-image.index', 'content-image.create', 'content-image.edit'], $content->menu_id);
$this->menu('Videos', 'content-video.index', 'fa-solid fa-video', ['content-video.index', 'content-video.create', 'content-video.edit'], $content->menu_id);
$this->menu('Translations', 'app-translation.index', 'fa-solid fa-language', ['app-translation.index', 'app-translation.create', 'app-translation.edit'], $content->menu_id);
$this->menu('Feedback', 'content-feedback.index', 'fa-solid fa-comment', ['content-feedback.index', 'content-feedback.create', 'content-feedback.edit', 'content-feedback.export'], $content->menu_id);
$this->menu('Public Holidays', 'content-public-holiday.index', 'fa-solid fa-calendar-day', ['content-public-holiday.index', 'content-public-holiday.create', 'content-public-holiday.edit'], $content->menu_id);
$this->menu('Calendar', 'content-calendar.index', 'fa-solid fa-calendar-days', ['content-calendar.index', 'content-calendar.create', 'content-calendar.edit'], $content->menu_id);
$directory = $this->menu('Directory', '#', 'fa-solid fa-address-book', [
'content-directory-department.index',
'content-directory-department.create',
'content-directory-department.edit',
'content-directory-staff.index',
'content-directory-staff.create',
'content-directory-staff.edit',
], $content->menu_id);
$this->menu('Departments', 'content-directory-department.index', 'fa-solid fa-building', ['content-directory-department.index', 'content-directory-department.create', 'content-directory-department.edit'], $directory->menu_id);
$this->menu('Staff', 'content-directory-staff.index', 'fa-solid fa-id-card', ['content-directory-staff.index', 'content-directory-staff.create', 'content-directory-staff.edit'], $directory->menu_id);
$this->assignRoleMenu('super-admin', [
[$home->menu_id, 0],
[$backend->menu_id, 0],
[$backendUser->menu_id, $backend->menu_id],
[$this->findMenuId('Parameters'), $backend->menu_id],
[$rolesPermissions->menu_id, $backend->menu_id],
[$this->findMenuId('Roles'), $rolesPermissions->menu_id],
[$this->findMenuId('Permissions'), $rolesPermissions->menu_id],
[$this->findMenuId('Auto Permissions'), $rolesPermissions->menu_id],
[$this->findMenuId('Routes'), $backend->menu_id],
[$this->findMenuId('Menu'), $backend->menu_id],
[$this->findMenuId('Assign Menu'), $backend->menu_id],
[$dataDashboard->menu_id, $backend->menu_id],
[$this->findMenuId('Activity Log'), $backend->menu_id],
[$this->findMenuId('Visitor'), $backend->menu_id],
[$this->findMenuId('Theme'), $backend->menu_id],
[$this->findMenuId('Theme Settings'), $this->findMenuId('Theme')],
[$this->findMenuId('Theme Rules'), $this->findMenuId('Theme')],
[$moduleGenerator->menu_id, $backend->menu_id],
[$frontend->menu_id, 0],
[$frontendUser->menu_id, $frontend->menu_id],
[$this->findMenuId('Assets'), $frontend->menu_id],
[$this->findMenuId('Sites'), $frontend->menu_id],
[$this->findMenuId('Components'), $frontend->menu_id],
[$frontendMenu->menu_id, $frontend->menu_id],
[$frontendAssign->menu_id, $frontend->menu_id],
[$content->menu_id, 0],
[$this->findMenuId('Articles'), $content->menu_id],
[$this->findMenuId('Links'), $content->menu_id],
[$this->findMenuId('Documents'), $content->menu_id],
[$this->findMenuId('Photo Galleries'), $content->menu_id],
[$this->findMenuId('Slider Images'), $content->menu_id],
[$this->findMenuId('Images'), $content->menu_id],
[$this->findMenuId('Videos'), $content->menu_id],
[$this->findMenuId('Translations'), $content->menu_id],
[$this->findMenuId('Feedback'), $content->menu_id],
[$this->findMenuId('Public Holidays'), $content->menu_id],
[$this->findMenuId('Calendar'), $content->menu_id],
[$directory->menu_id, $content->menu_id],
[$this->findMenuId('Departments'), $directory->menu_id],
[$this->findMenuId('Staff'), $directory->menu_id],
]);
Cache::forget('backend_menu_super-admin');
}
private function menu(string $name, string $link, ?string $class, array $activeRoutes, int $parentId = 0): Menu
{
return Menu::updateOrCreate(
['menu_name' => $name, 'menu_link' => $link],
[
'menu_link' => $link,
'menu_class' => $class,
'menu_active_route' => $activeRoutes,
'menu_parent_id' => $parentId,
'menu_status' => true,
]
);
}
private function assignRoleMenu(string $roleCode, array $items): void
{
foreach ($items as $sort => [$menuId, $parentId]) {
RoleMapping::updateOrCreate(
[
'role_code' => $roleCode,
'menu_id' => $menuId,
],
[
'parent_id' => $parentId,
'sort' => $sort + 1,
'created_by' => 'seeder',
'updated_by' => 'seeder',
]
);
}
}
private function findMenuId(string $name): int
{
return Menu::where('menu_name', $name)->value('menu_id');
}
}