Maison >développement back-end >tutoriel php >Middleware paramétré à Laravel
Le système middleware de Laravel gagne une flexibilité significative par paramétrage, permettant un comportement dynamique basé sur des données d'exécution. Cela est particulièrement utile pour des scénarios tels que le contrôle d'accès basé sur les rôles, la limitation des taux ou toute situation exigeant la logique middleware configurable.
Voici un exemple démontrant la protection des routes basée sur les rôles à l'aide du middleware paramétré:
namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class EnsureUserHasRole { public function handle(Request $request, Closure $next, string ...$roles) { if (!$request->user()?->hasAnyRole($roles)) { return response()->json(['error' => 'Insufficient permissions'], 403); } return $next($request); } }
Ce middleware vérifie si l'utilisateur authentifié possède l'un des rôles spécifiés. Voyons comment il est utilisé dans la définition de l'itinéraire:
use App\Http\Controllers\PostController; use App\Http\Middleware\EnsureUserHasRole; Route::prefix('posts')->group(function () { // Public routes Route::get('/', [PostController::class, 'index']); // Editor routes Route::put('/{id}', [PostController::class, 'update']) ->middleware(EnsureUserHasRole::class . ':editor'); Route::post('/', [PostController::class, 'store']) ->middleware(EnsureUserHasRole::class . ':editor'); // Admin routes Route::delete('/{id}', [PostController::class, 'destroy']) ->middleware(EnsureUserHasRole::class . ':admin'); });Les paramètres
les paramètres :editor
et :admin
transmis au middleware déterminent dynamiquement les rôles requis. Cette approche maintient des itinéraires et des contrôleurs propres tout en mettant en œuvre une autorisation sophistiquée. La puissance du middleware paramétré réside dans sa capacité à injecter des données spécifiques au contexte dans la logique du middleware, résultant en un code plus adaptable et maintenable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!