আমাদের অনেক প্রয়োজনে লারাভেলে কাস্টম মিডিলওয়ার তৈরি করার দরকার পরে। আমরা চাইলে কোনো থার্ডপার্টি প্লাগিন ব্যবহার না করে সহজেই একটি লারাভেল মিডিলওয়ার তৈরী করে নিতে পারি। তাহলে চলুন দেখা যাক।
প্রথমে নিচের আর্টিসান কমান্ডটি দিয়ে একটি মিডিলওয়ার তৈরী করে নেই।
php artisan make:middleware CheckRole
এই কমান্ডটি চালানোর পর আমাদের একটি নতুন ক্লাস তৈরী হবে app/Http/Middleware এই ফোল্ডারে। এখন ফাইলটি ওপেন করি।
<?php
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Perform action
return $next($request);
}
}
এখন আমরা এটি একটু পরিবর্তন করে আমাদের ব্যবহার উপযোগী করতে পারি। ধরি আমাদের চেক করা প্রয়োজন যে কোনো ইউজারের কোনো একটি কাজ করার অনুমতি আছে কিনা। তাহলে লারাভেল কোডটি হবে নিচের মতো।
<?php
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}
return $next($request);
}
}
যদি ইউজারের রোল না থাকে তবে তাকে রিডাইরেক্ট করে দিবো। এখন প্রশ্ন হবে যে $role আসলো কোথা থেকে ?
আসলে এইটা একটা আর্গুমেন্ট। এটা আমরা পাস্ করবো কন্ট্রোলার থেকে। চলো তার আগে আমরা আমাদের মিডিলওয়ার রেজিস্টার করে নেই। রেজিস্টার করার জন্য app/Http/Kernel.php এই ফাইলটি ওপেন করুন এবং নিচের মতো আমাদের মিডিলওয়ার টি এড করে দেই।
// Within App\Http\Kernel Class...
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'checkRole' => \App\Http\Middleware\CheckRole::class,
];
এখন আমরা কন্ট্রোলারে যাই এবং নিচের লাইন যোগ করি।
//At our Controller
public function __construct()
{
$this->middleware('checkRole:admin');
}
একটু উপরে যে আমরা একটি $role ভ্যারিয়েবল ব্যবহার করেছিলাম ঐটা এখানে checkRole এর পরে কোলন দিয়ে লিখেছি। এখন সহজেই যেকোনো রোল দিয়ে চেক করা যাবে যে ইউজার ওই রোল এ আছে কিনা।
ধন্যবাদ।
