😆Use package lavary/laravel-menu create menu have role & permission (ok)

https://github.com/lavary/laravel-menu

C:\xampp82\htdocs\lva2\app\Http\Middleware\GenerateMenus.php

<?php
namespace App\Http\Middleware;
use Closure;
class GenerateMenus
{
  /**
   * Handle an incoming request.
   *
   * @param  \Illuminate\Http\Request  $request
   * @return mixed
   */
  public function handle($request, Closure $next)
  {
    \Menu::make('admin_sidebar', function ($menu) {
      // Dashboard
      $menu->add('<i class="nav-icon fa-solid fa-cubes"></i> ' . __('Dashboard'), [
        'route' => 'home',
        'class' => 'nav-item',
      ])
        ->data([
          'order' => 1,
          'activematches' => 'admin/dashboard*',
        ])
        ->link->attr([
          'class' => 'nav-link',
        ]);
      // Notifications
      $menu->add('<i class="nav-icon fas fa-bell"></i> Notifications', [
        'route' => 'home',
        'class' => 'nav-item',
      ])
        ->data([
          'order' => 99,
          'activematches' => 'admin/notifications*',
          'permission' => [],
        ])
        ->link->attr([
          'class' => 'nav-link',
        ]);
      // Separator: Access Management
      $menu->add('Management', [
        'class' => 'nav-title',
      ])
        ->data([
          'order' => 101,
          'permission' => ['edit_settings', 'view_backups', 'view_users', 'view_roles', 'view_logs'],
        ]);
      // Settings
      $menu->add('<i class="nav-icon fas fa-cogs"></i> Settings', [
        'route' => 'home',
        'class' => 'nav-item',
      ])
        ->data([
          'order' => 102,
          'activematches' => 'admin/settings*',
          'permission' => ['edit_settings'],
        ])
        ->link->attr([
          'class' => 'nav-link',
        ]);
      // Backup
      $menu->add('<i class="nav-icon fas fa-archive"></i> Backups', [
        'route' => 'home',
        'class' => 'nav-item',
      ])
        ->data([
          'order' => 103,
          'activematches' => 'admin/backups*',
          'permission' => ['view_backups'],
        ])
        ->link->attr([
          'class' => 'nav-link',
        ]);
      // Access Control Dropdown
      $accessControl = $menu->add('<i class="nav-icon fa-solid fa-user-gear"></i> Access Control', [
        'class' => 'nav-group',
      ])
        ->data([
          'order' => 104,
          'activematches' => [
            'admin/users*',
            'admin/roles*',
          ],
          'permission' => ['view_users', 'view_roles'],
        ]);
      $accessControl->link->attr([
        'class' => 'nav-link nav-group-toggle',
        'href' => '#',
      ]);
      // Submenu: Users
      $accessControl->add('<i class="nav-icon fa-solid fa-user-group"></i> Users', [
        'route' => 'home',
        'class' => 'nav-item',
      ])
        ->data([
          'order' => 105,
          'activematches' => 'admin/users*',
          'permission' => ['view_users'],
        ])
        ->link->attr([
          'class' => 'nav-link',
        ]);
      // Submenu: Roles
      $accessControl->add('<i class="nav-icon fa-solid fa-user-shield"></i> Roles', [
        'route' => 'home',
        'class' => 'nav-item',
      ])
        ->data([
          'order' => 106,
          'activematches' => 'admin/roles*',
          'permission' => ['view_roles'],
        ])
        ->link->attr([
          'class' => 'nav-link',
        ]);
      // Log Viewer
      // Log Viewer Dropdown
      $accessControl = $menu->add('<i class="nav-icon fa-solid fa-list-check"></i> Log Viewer', [
        'class' => 'nav-group',
      ])
        ->data([
          'order' => 107,
          'activematches' => [
            'log-viewer*',
          ],
          'permission' => ['view_logs'],
        ]);
      $accessControl->link->attr([
        'class' => 'nav-link nav-group-toggle',
        'href' => '#',
      ]);
      // Submenu: Log Viewer Dashboard
      $accessControl->add('<i class="nav-icon fa-solid fa-list"></i> Dashboard', [
        'route' => 'home',
        'class' => 'nav-item',
      ])
        ->data([
          'order' => 108,
          'activematches' => 'admin/log-viewer',
        ])
        ->link->attr([
          'class' => 'nav-link',
        ]);
      // Submenu: Log Viewer Logs by Days
      $accessControl->add('<i class="nav-icon fa-solid fa-list-ol"></i> Logs by Days', [
        'route' => 'home',
        'class' => 'nav-item',
      ])
        ->data([
          'order' => 109,
          'activematches' => 'admin/log-viewer/logs*',
        ])
        ->link->attr([
          'class' => 'nav-link',
        ]);
      // Access Permission Check
      $menu->filter(function ($item) {
        if ($item->data('permission')) {
          if (auth()->check()) {
            if (auth()->user()->hasRole('super admin')) {
              return true;
            } elseif (auth()->user()->hasAnyPermission($item->data('permission'))) {
              return true;
            }
          }
          return false;
        } else {
          return true;
        }
      });
      // Set Active Menu
      $menu->filter(function ($item) {
        if ($item->activematches) {
          $activematches = (is_string($item->activematches)) ? [$item->activematches] : $item->activematches;
          foreach ($activematches as $pattern) {
            if (request()->is($pattern)) {
              $item->active();
              $item->link->active();
              if ($item->hasParent()) {
                $item->parent()->active();
              }
            }
          }
        }
        return true;
      });
    })->sortBy('order');
    return $next($request);
  }
}

C:\xampp82\htdocs\lva2\resources\views\welcome.blade.php

C:\xampp82\htdocs\lva2\app\Http\Kernel.php

C:\xampp82\htdocs\lva2\config\app.php

C:\xampp82\htdocs\lva2\app\Console\Commands\AuthPermissionCommand.php

C:\xampp82\htdocs\lva2\app\Events\Backend\UserCreated.php

C:\xampp82\htdocs\lva2\app\Models\Permission.php

C:\xampp82\htdocs\lva2\app\Models\Role.php

C:\xampp82\htdocs\lva2\app\Models\User.php

C:\xampp82\htdocs\lva2\database\factories\UserFactory.php

C:\xampp82\htdocs\lva2\database\migrations\2014_10_12_000000_create_users_table.php

C:\xampp82\htdocs\lva2\database\seeders\Auth\PermissionRoleTableSeeder.php

C:\xampp82\htdocs\lva2\database\seeders\Auth\UserRoleTableSeeder.php

C:\xampp82\htdocs\lva2\database\seeders\Auth\UserTableSeeder.php

C:\xampp82\htdocs\lva2\database\seeders\AuthTableSeeder.php

Và kết quả thật tuyệt vời

326KB
archive
Open

Last updated

Was this helpful?