فیلتر کردن درخواستها با Middleware
Middleware لایهای است که هر درخواست HTTP پیش از رسیدن به Controller از آن عبور میکند و امکان بررسی یا تغییر درخواست، یا حتی متوقف کردن آن را فراهم میسازد. کاربرد رایج آن بررسی ورود کاربر، بررسی نقش (role) یا لاگ کردن درخواستها است.
لاراول چند Middleware آماده مانند auth دارد، اما ساخت یک Middleware اختصاصی نیز بسیار ساده است:
php artisan make:middleware CheckAdmin
class CheckAdmin
{
public function handle($request, Closure $next)
{
if (! auth()->user() || ! auth()->user()->is_admin) {
abort(403, 'دسترسی غیرمجاز');
}
return $next($request);
}
}
پس از ساخت، باید Middleware را در فایل app/Http/Kernel.php با یک نام کوتاه ثبت کنید تا بتوانید در مسیرها از آن استفاده کنید:
protected $middlewareAliases = [
'admin' => \App\Http\Middleware\CheckAdmin::class,
];
سپس در فایل مسیرها:
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('/admin/panel', [AdminController::class, 'index']);
});
نکتهی کلیدی متد handle است: فراخوانی next($request) به معنای ادامه دادن زنجیرهی پردازش درخواست به سمت Controller است؛ اگر این خط اجرا نشود، درخواست همانجا متوقف میشود. میتوان چند Middleware را بهصورت زنجیرهای روی یک مسیر یا گروهی از مسیرها اعمال کرد.