Greeting, i configured a middleware who verified if a user have the right role to consult a page but a error "Target class [role] does not exist" keep going.
there's the code
the rounting :
// Redirections selon le rôle
Route::middleware(['auth', 'role:ROLE_ADMIN'])->group(function () {
Route::get('/admin/menuAdmin', function () {
return view('MenuAdmin');
})->name('admin.menuAdmin');
});
Route::middleware(['auth', 'role:ROLE_EMPLOYE'])->group(function () {
Route::get('/employee/menuEmployee', function () {
return view('MenuEmployee');
})->name('employee.menuEmployee');
});
Route::middleware(['auth', 'role:ROLE_CONDUCTEUR|ROLE_PASSAGER|ROLE_USER'])->group(function () {
Route::get('/customerUser/menuCustomer', function () {
return view('menuCustomer');
})->name('customerUser.menuCustomer');
});
the middleware
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class RoleMiddleware
{
public function handle(Request $request, Closure $next, ...$role): Response
{
if (!Auth::check()) {
abort(403, 'Accès interdit');
}
if (!in_array(Auth::user()->label, $role)) {
abort(403, 'Accès interdit');
}
return $next($request);
}
}
the kernel file
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Auth\Middleware\Authenticate;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use App\Http\Middleware\RoleMiddleware;
use App\Http\Middleware\ImageUploadMiddleware;
class Kernel extends HttpKernel
{
protected $routeMiddleware = [
'role' => RoleMiddleware::class,
'image.upload' => ImageUploadMiddleware::class,
];
}
the view
@extends('base')
<link rel="stylesheet" href="{{ asset('assets/css/menu.css') }}">
<div>
<script>
window.buttonConfig = [
@if (Auth::user()->hasRole('ROLE_USER'))
{ link: "{{ route('CustomerUser.RoleAttribution') }}", icon: 'ph ph-user-check', description: "Validation" },
@elseif (Auth::user()->hasRole('ROLE_CONDUCTEUR'))
{ link: "{{ route('CustomerUser.annonceCreation') }}", icon: 'ph ph-signpost', description: "Création annonce" },
{ link: "{{ route('CustomerUser.gestionTrajet') }}", icon: 'ph ph-car-profile', description: "Gestion des trajets" },
{ link: "{{ route('CustomerUser.trajet') }}", icon: 'ph ph-flag-banner', description: "Trajet en cours" },
@elseif (Auth::user()->hasRole('ROLE_PASSAGER'))
{ link: "{{ route('CustomerUser.gestionTrajet') }}", icon: 'ph ph-signpost', description: "Trajet en cours" },
{ link: "{{ route('CustomerUser.avis') }}", icon: 'ph ph-star', description: "Avis" },
@endif
];
// Génération dynamique des boutons
const root = document.getElementById('root');
window.buttonConfig.forEach(button => {
const linkElement = document.createElement('a');
linkElement.href = button.link;
linkElement.innerHTML = `<i class="${button.icon}"></i> ${button.description}`;
linkElement.classList.add('button-menu'); // Classe CSS pour styliser les boutons
root.appendChild(linkElement);
});
</script>
<button class="footer-button" href="{{ route('logout') }}">
<i class="ph ph-door"></i>
</button>
</div>
ask if you need some another informations