Maison >développement back-end >tutoriel php >Middleware paramétré à Laravel

Middleware paramétré à Laravel

百草
百草original
2025-03-06 02:19:08372parcourir

Parameterized Middleware in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn