Your IP : 216.73.216.79


Current Path : /var/www/html/redd/database/seeders/
Upload File :
Current File : /var/www/html/redd/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',
            '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',
            'route.view',
            'route.create',
            'route.update',
            'route.delete',
            'visitor.view',
            'visitor.update',
            'visitor.delete',
        ];

        foreach ($permissions as $permission) {
            Permission::findOrCreate($permission, 'admin');
        }

        app(PermissionRegistrar::class)->forgetCachedPermissions();
        $role->givePermissionTo($permissions);

        $backend = $this->menu('Backend', '#', 'menu-icon-backend', [
            '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',
        ]);

        $backendUser = $this->menu('User', 'backend-user.index', null, ['backend-user.index', 'backend-user.create', 'backend-user.edit'], $backend->menu_id);
        $rolesPermissions = $this->menu('Roles & Permissions', '#', null, [
            'roles.index',
            'roles.create',
            'roles.edit',
            'permissions.index',
            'permissions.create',
            'permissions.edit',
            'auto-permissions.index',
        ], $backend->menu_id);
        $this->menu('Roles', 'roles.index', null, ['roles.index', 'roles.create', 'roles.edit'], $rolesPermissions->menu_id);
        $this->menu('Permissions', 'permissions.index', null, ['permissions.index', 'permissions.create', 'permissions.edit'], $rolesPermissions->menu_id);
        $this->menu('Auto Permissions', 'auto-permissions.index', null, ['auto-permissions.index'], $rolesPermissions->menu_id);
        $this->menu('Routes', 'admin.routes.index', null, ['admin.routes.index', 'admin.routes.create', 'admin.routes.edit'], $backend->menu_id);
        $this->menu('Menu', 'backend-menu.index', null, ['backend-menu.index', 'backend-menu.create', 'backend-menu.edit'], $backend->menu_id);
        $this->menu('Assign Menu', 'backend-menu.assign', null, ['backend-menu.assign'], $backend->menu_id);
        $this->menu('Parameter', 'ref.index', null, ['ref.index', 'ref.create', 'ref.edit'], $backend->menu_id);
        $this->menu('Activity Log', 'activity-log.index', null, ['activity-log.index'], $backend->menu_id);
        $this->menu('Visitor', 'visitor.index', null, ['visitor.index'], $backend->menu_id);

        $frontend = $this->menu('Frontend', '#', 'menu-icon-frontend', [
            'frontend-user.index',
            'frontend-user.create',
            'frontend-user.edit',
            'file-manager.index',
            'frontend-menu.index',
            'frontend-menu.create',
            'frontend-menu.edit',
            'frontend-menu.assign',
            'menu-category.index',
            'menu-category.create',
            'menu-category.edit',
        ]);

        $frontendUser = $this->menu('User', 'frontend-user.index', null, ['frontend-user.index', 'frontend-user.create', 'frontend-user.edit'], $frontend->menu_id);
        $this->menu('File Manager', 'file-manager.index', null, ['file-manager.index'], $frontend->menu_id);
        $frontendMenu = $this->menu('Menu', 'frontend-menu.index', null, ['frontend-menu.index', 'frontend-menu.create', 'frontend-menu.edit'], $frontend->menu_id);
        $frontendAssign = $this->menu('Assign Menu', 'frontend-menu.assign', null, ['frontend-menu.assign'], $frontend->menu_id);

        $content = $this->menu('Content', '#', 'menu-icon-content', [
            '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-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',
        ]);

        $this->menu('Articles', 'content-article.index', null, ['content-article.index', 'content-article.create', 'content-article.edit'], $content->menu_id);
        $this->menu('Links', 'content-application.index', null, ['content-application.index', 'content-application.create', 'content-application.edit'], $content->menu_id);
        $this->menu('Documents', 'content-download.index', null, ['content-download.index', 'content-download.create', 'content-download.edit'], $content->menu_id);
        $this->menu('Photo Galleries', 'content-photo-gallery.index', null, ['content-photo-gallery.index', 'content-photo-gallery.create', 'content-photo-gallery.edit'], $content->menu_id);
        $this->menu('Slider Images', 'content-slider.index', null, ['content-slider.index', 'content-slider.create', 'content-slider.edit'], $content->menu_id);
        $this->menu('Images', 'content-image.index', null, ['content-image.index', 'content-image.create', 'content-image.edit'], $content->menu_id);
        $this->menu('Videos', 'content-video.index', null, ['content-video.index', 'content-video.create', 'content-video.edit'], $content->menu_id);

        $this->assignRoleMenu('super-admin', [
            [$backend->menu_id, 0],
            [$backendUser->menu_id, $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],
            [$this->findMenuId('Parameter'), $backend->menu_id],
            [$this->findMenuId('Activity Log'), $backend->menu_id],
            [$this->findMenuId('Visitor'), $backend->menu_id],
            [$frontend->menu_id, 0],
            [$frontendUser->menu_id, $frontend->menu_id],
            [$this->findMenuId('File Manager'), $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],
        ]);

        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');
    }
}