😆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







Last updated
Was this helpful?