DEV Community

Al-Amin Islam
Al-Amin Islam

Posted on • Edited on

লারাভেল কাস্টম মিডিলওয়ার তৈরী

আমাদের অনেক প্রয়োজনে লারাভেলে কাস্টম মিডিলওয়ার তৈরি করার দরকার পরে। আমরা চাইলে কোনো থার্ডপার্টি প্লাগিন ব্যবহার না করে সহজেই একটি লারাভেল মিডিলওয়ার তৈরী করে নিতে পারি। তাহলে চলুন দেখা যাক।

প্রথমে নিচের আর্টিসান কমান্ডটি দিয়ে একটি মিডিলওয়ার তৈরী করে নেই।

php artisan make:middleware CheckRole
Enter fullscreen mode Exit fullscreen mode

এই কমান্ডটি চালানোর পর আমাদের একটি নতুন ক্লাস তৈরী হবে app/Http/Middleware এই ফোল্ডারে। এখন ফাইলটি ওপেন করি।

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckRole
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        return $next($request);
    }
}

Enter fullscreen mode Exit fullscreen mode

আমাদের চেক করা প্রয়োজন যে কোনো ইউজারের কোনো একটি কাজ করার অনুমতি আছে কিনা। তাহলে লারাভেল কোডটি হবে নিচের মতো।



<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class CheckRole
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        if(Auth::user()->role == 'customer'){

            return redirect(route('customerDashboard'));
        }
        else{
            return redirect(route('adminDashboard'));
        }

        return $next($request);
    }
}

Enter fullscreen mode Exit fullscreen mode

এখন সহজেই যেকোনো রোল দিয়ে চেক করা যাবে যে ইউজার ওই রোল এ আছে কিনা।আমরা আমাদের মিডিলওয়ার রেজিস্টার করে নেই। রেজিস্টার করার জন্য 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,
];

Enter fullscreen mode Exit fullscreen mode

এখন আমরা কন্ট্রোলারে যাই এবং নিচের লাইন যোগ করি।

`
//At our Controller

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('CheckRole');
}
Enter fullscreen mode Exit fullscreen mode

`

ধন্যবাদ।

Top comments (0)