Table des matières

Laravel

Middleware

Un Middleware permet de filtrer les requêtes HTTP entrantes dans l'application. Il se place entre la requête et le reste de l'application.

Il permet de lire les informations de la requête et de faire des actions suivant ces informations.

Par défaut, Laravel est livré avec plusieurs Middleware. Nous avons déjà utilisé le auth qui permet de rediriger les utilisateurs non identifiés vers la page de connexion.

Kernel.php

Les Middleware sont déclarés dans le fichier app/Http/Kernel.php

Il y a 3 tableaux dans ce fichier qui correspondent à 3 types de déclarations.

On peut voir dans le tableau $routeMiddleware qu'il y a auth, c'est le middleware qui est utilisé quand on appelle la méthode $this→middleware('auth') dans le contrôleur ou dans une route.

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ...
];

Donc quand on appelle auth, ça charge le fichier /app/Http/Middleware/Authenticate.php

Les Middleware sont dans le dossier /app/Http/Middleware

Créer un Middleware

Création d'un Middleware Admin qui permettra de savoir si l'utilisateur connecté est un administrateur

Pour créer le fichier, on peut utiliser php artisan

php artisan make:middleware Admin

Il y a maintenant un fichier dans /app/Http/Middleware

Ajout du code pour vérifier si l'utilisateur est un administrateur. Le code doit être ajouté dans la méthode handle()

public function handle($request, Closure $next)
    {
        $user = $request->user();

        if ($user && $user->admin) {
            return $next($request);
        }

        return redirect()->route('home');
    }

$user→admin est expliqué dans le chapitre sur les modèles Getter et Setter

Ajout du Middleware dans le Kernel.php

il faut maintenant ajouter le Middleware que l'on vient de créer dans le fichier Kernel.php

protected $routeMiddleware = [
...
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'admin' => \App\Http\Middleware\Admin::class,
    ];

Utilisation

Pour utiliser ce nouveau middleware, on peut l'ajouter à une route par exemple

...
Route::middleware('admin')->prefix('admin')->group(function () {
    Route::resource ('user', 'UserController');
});
...

Pour accéder au UserController, il faut que l'utilisateur connecté soit un administrateur.