Role-based Authorization কনফিগার করা

Authentication এবং Authorization - কেকপিএইচপি (CakePHP) - Web Development

271

CakePHP তে Role-based Authorization ব্যবহার করে আপনি ব্যবহারকারীদের বিভিন্ন ভূমিকা (role) এবং অনুমতি (permissions) অনুযায়ী অ্যাক্সেস কন্ট্রোল করতে পারেন। এর মাধ্যমে, আপনি সহজেই নির্ধারণ করতে পারবেন কোন ব্যবহারকারী কী করতে পারবে এবং কী করতে পারবে না। এটি অ্যাপ্লিকেশন সিকিউরিটি এবং অ্যাক্সেস কন্ট্রোল ম্যানেজমেন্টের জন্য অত্যন্ত গুরুত্বপূর্ণ।


Role-based Authorization কনফিগারেশন

CakePHP তে Role-based Authorization কনফিগার করার জন্য সাধারণত Acl (Access Control List) বা Authorization Plugin ব্যবহার করা হয়। তবে, CakePHP 4.x এ একটি নতুন Authorization প্যাকেজ এসেছে যা রোল-ভিত্তিক অনুমতি পরিচালনার জন্য আরো সহজ এবং শক্তিশালী।

এই টিউটোরিয়ালে, আমরা CakePHP 4.x এর Authorization Plugin এর মাধ্যমে Role-based Authorization কনফিগার করব।


Authorization Plugin ইনস্টল করা

প্রথমে, আপনাকে CakePHP এর Authorization Plugin ইনস্টল করতে হবে। আপনি Composer ব্যবহার করে এটি ইনস্টল করতে পারেন:

composer require cakephp/authorization

এটি ইনস্টল করার পর, আপনাকে আপনার অ্যাপ্লিকেশনের src/Application.php ফাইলে এটি লোড করতে হবে:

// src/Application.php
use Cake\Http\MiddlewareQueue;
use Cake\Authorization\AuthorizationMiddleware;

public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue
{
    $middlewareQueue->add(AuthorizationMiddleware::class);
    return $middlewareQueue;
}

এটি আপনার অ্যাপ্লিকেশনে Authorization Middleware যুক্ত করবে, যা রিকোয়েস্ট গুলির অনুমতি যাচাই করবে।


ব্যবহারকারীর রোল তৈরি করা

CakePHP তে রোল তৈরি করতে, সাধারণত Users টেবিলের একটি ফিল্ড ব্যবহার করা হয় যা ব্যবহারকারীর রোল সনাক্ত করে। উদাহরণস্বরূপ, role ফিল্ডের মাধ্যমে ব্যবহারকারীর রোল নির্ধারণ করা যেতে পারে (যেমন: admin, editor, user)।

Users টেবিলের রোল ফিল্ড

// src/Model/Table/UsersTable.php
$this->addBehavior('Cake\Auth\SocialLoginBehavior');
$this->addBehavior('Timestamp');

আপনি যদি Users টেবিল তৈরি না করে থাকেন, তাহলে role ফিল্ড সহ একটি টেবিল তৈরি করতে পারেন:

// Migration Example
public function change()
{
    $table = $this->table('users');
    $table->addColumn('role', 'string', ['default' => 'user', 'limit' => 255])
          ->update();
}

এখন, role ফিল্ডের মাধ্যমে আপনি ব্যবহারকারীর রোল নিয়ন্ত্রণ করতে পারবেন।


Authorization Service কনফিগার করা

Authorization Service ব্যবহার করে রোল-based authorization কনফিগার করা হয়। প্রথমে, আপনাকে src/Controller/AppController.php ফাইলে Authorization Service কনফিগার করতে হবে।

// src/Controller/AppController.php
use Cake\Authorization\AuthorizationServiceInterface;
use Cake\Controller\Controller;

class AppController extends Controller
{
    public function initialize(): void
    {
        parent::initialize();

        $this->loadComponent('Authorization.Authorization');
    }
}

এখন, Authorization সিস্টেম কনফিগার হয়েছে এবং রোল যাচাই করতে প্রস্তুত।


Role-based Authorization লগিক তৈরি করা

CakePHP তে, আপনি কন্ট্রোলার বা অ্যাকশন স্তরে রোল-বেসড অথোরাইজেশন কনফিগার করতে পারেন। AuthorizationService এর মাধ্যমে আপনি নির্দিষ্ট অ্যাকশনে কে কী করতে পারবে তা নির্ধারণ করতে পারেন।

উদাহরণ: Admin রোল এর জন্য অথোরাইজেশন

ধরা যাক, আপনার একটি অ্যাডমিন প্যানেল রয়েছে এবং শুধুমাত্র admin রোলের ব্যবহারকারীরা এই প্যানেলে প্রবেশ করতে পারবে।

// src/Controller/PostsController.php
use Cake\Authorization\AuthorizationServiceInterface;

class PostsController extends AppController
{
    public function initialize(): void
    {
        parent::initialize();
        // PostsController এ Authorization চালু করা
        $this->loadComponent('Authorization.Authorization');
    }

    public function beforeFilter(EventInterface $event)
    {
        parent::beforeFilter($event);

        // কেবলমাত্র 'admin' রোলের ব্যবহারকারী অ্যাডমিন অ্যাকশনগুলো অ্যাক্সেস করতে পারবে
        $this->Authorization->skipAuthorization(['index', 'view']); // public actions
    }

    public function index()
    {
        // সকল ব্যবহারকারীর জন্য পেজ
        $this->Authorization->authorize($this->request->getAttribute('param', 'posts'));
        $posts = $this->Posts->find('all');
        $this->set(compact('posts'));
    }

    public function edit($id = null)
    {
        $post = $this->Posts->get($id);

        // কেবলমাত্র admin রোলের ব্যবহারকারীদের অনুমতি দিবে
        $this->Authorization->authorize($post);
        $this->set(compact('post'));
    }
}

এখানে, skipAuthorization() মেথডটি পেমিশন চেক করবে না শুধুমাত্র নির্দিষ্ট অ্যাকশনগুলির জন্য (যেমন index এবং view), আর অন্যান্য অ্যাকশনের জন্য Authorization চেক করবে।


কাস্টম Authorization পলিসি তৈরি করা

CakePHP তে আপনি Authorization Policy ব্যবহার করে কাস্টম অনুমতি তৈরি করতে পারেন। এটি src/Policy ফোল্ডারে একটি পলিসি ক্লাস তৈরি করতে সহায়তা করে।

Policy ক্লাস তৈরি

// src/Policy/PostPolicy.php
namespace App\Policy;

use App\Model\Entity\Post;
use Authorization\IdentityInterface;

class PostPolicy
{
    public function canEdit(IdentityInterface $user, Post $post)
    {
        // যদি ব্যবহারকারী admin হয়, তাহলে তারা সব পোস্ট সম্পাদনা করতে পারবে
        return $user->role === 'admin';
    }
}

এখানে, canEdit() মেথডটি চেক করবে যদি ব্যবহারকারীর রোল admin হয়, তাহলে সে Post সম্পাদনা করতে পারবে।

পলিসি ব্যবহার

আপনার কন্ট্রোলারে canEdit() পলিসি মেথড ব্যবহার করে Authorization চেক করতে হবে:

// src/Controller/PostsController.php
public function edit($id = null)
{
    $post = $this->Posts->get($id);
    $this->Authorization->authorize($post);
}

এখন, canEdit() মেথডটি ব্যবহারকারীর রোল এবং অনুমতির উপর ভিত্তি করে অনুমতি প্রদান করবে।


CakePHP তে Role-based Authorization কনফিগার করা সহজ এবং কার্যকর। Authorization Plugin এবং AuthorizationService ব্যবহার করে আপনি সহজে বিভিন্ন রোলের জন্য অ্যাক্সেস কন্ট্রোল সেট করতে পারেন। পলিসি এবং কাস্টম অনুমতি ফাংশন ব্যবহার করে, আপনি আপনার অ্যাপ্লিকেশনের নিরাপত্তা ব্যবস্থা শক্তিশালী এবং নমনীয় করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...