چگونه در لاراول Middleware شخصی ایجاد کنیم؟
جهت ایجاد یک middleware شخصی در لاراول کافی است ابتدا آن middleware را ایجاد کرده و سپس عملیات مورد نظر را در آن پیاده و پس از رجیستر آن را فراخوانی کنیم.
فرض را بر این میگیریم که قصد داریم یک میدل ور جهت بررسی نقش کاربر یا همان User Role ایجاد کنیم. روش کار به این صورت است.
ابتدا یک میدل ور ایجاد با نام IsAdmin ایجاد میکنم:
php artisan make:middleware IsAdmin
میدل ور در مسیر زیر قرار خواهد گرفت:
App > Http > Middleware
سپس در کلاس ایجاد شده، در متد مربوطه دستورات خود را وارد میکنم که در زیر قابل مشاهده است که من ابتدا بررسی کرد که کاربر ورود کرده است یا خیر و در صورت ورود نقش کاربر را چک کردهام که در صورتی که admin نبود هم میتوانم کاربر را ریدایرکت کنم و هم میتوانم خطای 403 که عدم مجوز دسترسی را نشان میدهد، به کاربر نمایش دهم و حتی میتوانم خطای 404 را نمایش دهم که برابر با عدم وجود صفحه است که کاملاً به خودم بستگی دارد.
public function handle(Request $request, Closure $next)
{
if(Auth::check()){
if(Auth::user()->role != 'admin'){
return redirect('/');
//abort(403);
}
}
return $next($request);
}
در نهایت نیاز است که میدل ور ایجاد شده را رجیستر کنم، در غیر اینصورت ناچارم هنگام فراخوانی آدرس آن را به صورت کامل صدا بزنم. پس به فایل Kernel.php در لاراول مراجعه میکنیم و در قسمت زیر میدل ور خود را رجیستر میکنم که به صورت key value است و من key را برابر با isadmin تعریف کردهام:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'isadmin' => \App\Http\Middleware\IsAdmin::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
جهت فراخوانی نیز کافی است در routeهای خود یا در خود کنترلر تلفیقی از میدل ورهای لازم را صدا بزنم که من در اینجا در یک کنترلر با متد construct مدیل ورهای مورد نیازم را صدا زدهام:
public function __construct()
{
$this->middleware(['auth','isadmin']);
}
کار تمام است و شما به همین شیوه میتوانید Middlewareهای دلخواه و مورد نیاز خود را ایجاد و مورد استفاده قرار دهید.
توی وبسایتم سعی میکنم محتوایی که تصور کنم ارزشمنده و به بقیه کمکی میکنه رو منتشر کنم. امیدوارم از مطالب وبسایت بتونید استفاده کنید و به کارتون بیاد. در ضمن اگه پروژهی تحت وبی دارید که نیاز به برنامهنویسی و اجرا داره، میتونید با شماره انتهای صفحه با من تماس بگیرید تا در موردش با هم صحبت کنیم.