meta data for this page
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.
- $middleware ⇒ liste les Middleware qui fonctionnent par défaut sur toute l’application
- $middlewareGroups ⇒ liste les Middleware qui pourront être associés à des groupes de routes.
- $routeMiddleware ⇒ liste les Middleware qui pourront être associés à différentes routes, qu’elles soient en groupe ou qu’elles soient individuelles.
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'); }
- Ligne 3 ⇒ mettre les informations de l'utilisateur connecté dans
$user
- Ligne 5 ⇒ vérifie que l'utilisateur existe et est un administrateur
- Ligne 6 ⇒ continue la route normale de la requête
- Ligne 9 ⇒ bloque la requête et redirige vers la page d'accueil
$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.