#Middleware dosen't work

9 messages · Page 1 of 1 (latest)

sage quiver
#

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

candid berry
#

In your kernel try renaming routeMiddleware attribute to $middlewareAliases. It was changed in one of the newer versions, though i thought it should still be backwards compatible but maybe not.

#

See if that fixes it first.

sage quiver
#

no change 😦

candid berry
sage quiver
#
[stacktrace]
#0 G:\\projet code\\Ecoride\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\Container.php(832): Illuminate\\Container\\Container->build('role')
#1 G:\\projet code\\Ecoride\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Application.php(1078): Illuminate\\Container\\Container->resolve('role', Array, true)
#2 G:\\projet code\\Ecoride\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\Container.php(763): Illuminate\\Foundation\\Application->resolve('role', Array)
#3 G:\\projet code\\Ecoride\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Application.php(1058): Illuminate\\Container\\Container->make('role', Array)
#4 G:\\projet code\\Ecoride\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(258): Illuminate\\Foundation\\Application->make('role')
#5 G:\\projet code\\Ecoride\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(216): Illuminate\\Foundation\\Http\\Kernel->terminateMiddleware(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))
#6 G:\\projet code\\Ecoride\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Application.php(1222): Illuminate\\Foundation\\Http\\Kernel->terminate(Object(Illuminate\\Http\\Request), Object(Illuminate\\Http\\Response))
#7 G:\\projet code\\Ecoride\\public\\index.php(17): Illuminate\\Foundation\\Application->handleRequest(Object(Illuminate\\Http\\Request))
#8 G:\\projet code\\Ecoride\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\resources\\server.php(23): require_once('G:\\\\projet code\\\\...')
#9 {main}
candid berry
sage quiver
#

i'm on the 11.44.1 version

#

the middleware work, that just need to declare on bootstrap/app.php