Authentication এবং Authorization

কেকপিএইচপি (CakePHP) - Web Development

289

CakePHP এ Authentication এবং Authorization দুটি গুরুত্বপূর্ণ নিরাপত্তা ফিচার, যা ওয়েব অ্যাপ্লিকেশনে ব্যবহারকারীদের সাইন ইন এবং তাদের অ্যাক্সেস রাইটস (অথরাইজেশন) নিয়ন্ত্রণ করতে ব্যবহৃত হয়। Authentication ব্যবহারকারীদের সঠিকভাবে সাইন ইন করার অনুমতি দেয়, আর Authorization ব্যবহারকারীদের বিভিন্ন রিসোর্সে অ্যাক্সেস প্রদান করে তাদের ভূমিকা ও অনুমতি অনুযায়ী।


Authentication (অথেন্টিকেশন) কি?

অথেন্টিকেশন প্রক্রিয়া হল ব্যবহারকারীর পরিচয় যাচাই করা। সাধারণত, এটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড দিয়ে হয়, তবে আধুনিক অ্যাপ্লিকেশনে টোকেন-ভিত্তিক অথেন্টিকেশন (যেমন JWT) ও ব্যবহার করা হয়।

CakePHP তে Authentication সিস্টেম সেটআপ করা বেশ সহজ এবং এটি Authentication প্লাগিন ব্যবহার করে করা হয়। এই প্লাগিনটি একটি শক্তিশালী অথেন্টিকেশন সিস্টেম সরবরাহ করে, যা বিভিন্ন ধরনের অথেন্টিকেশন স্ট্র্যাটেজি সাপোর্ট করে (যেমন পাসওয়ার্ড, টোকেন, সেশন ইত্যাদি)।


CakePHP তে Authentication কনফিগারেশন

১. Authentication প্লাগিন ইনস্টল করা

প্রথমে, আপনাকে Authentication প্লাগিনটি ইনস্টল করতে হবে।

composer require cakephp/authentication

২. Authentication কম্পোনেন্ট লোড করা

এখন, src/Controller/AppController.php ফাইলে AuthenticationComponent লোড করতে হবে।

// src/Controller/AppController.php

namespace App\Controller;

use Cake\Controller\Controller;
use Authentication\Controller\Component\AuthenticationComponent;
use Cake\Event\EventInterface;

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

        // Authentication কম্পোনেন্ট লোড করা
        $this->loadComponent('Authentication.Authentication');
    }

    // User কে লগিন করানোর পরে রিডাইরেক্ট করা
    public function beforeFilter(EventInterface $event)
    {
        $this->Authentication->addUnauthenticatedActions(['login']);
    }
}

এখানে, Authentication কম্পোনেন্ট লোড করা হয়েছে এবং beforeFilter() মেথডে অ্যাকশনগুলো (যেমন লগইন পেজ) ছাড়া অন্য অ্যাকশনগুলোকে অথেন্টিকেট করা হয়েছে।

৩. লগইন অ্যাকশন তৈরি করা

এখন, আপনি একটি লগইন অ্যাকশন তৈরি করতে পারেন যেখানে ব্যবহারকারী নাম এবং পাসওয়ার্ড দিয়ে লগইন করবেন।

// src/Controller/UsersController.php

namespace App\Controller;

use App\Controller\AppController;
use Cake\Datasource\Exception\RecordNotFoundException;

class UsersController extends AppController
{
    public function login()
    {
        $this->request->allowMethod(['post']);
        $user = $this->Authentication->getIdentity();
        
        if ($user) {
            return $this->redirect(['controller' => 'Dashboard', 'action' => 'index']);
        }

        // যদি লগইন সফল না হয়
        if ($this->request->is('post')) {
            $user = $this->Authentication->getResult()->getData();
            if ($user) {
                return $this->redirect(['controller' => 'Dashboard', 'action' => 'index']);
            }
            $this->Flash->error('Invalid username or password');
        }
    }
}

এখানে, লগইন প্রক্রিয়া দুইটি স্টেপে কাজ করছে:

  1. প্রথমে, getIdentity() মেথডের মাধ্যমে বর্তমান ব্যবহারকারী যাচাই করা হয়।
  2. যদি পাসওয়ার্ড সঠিক হয়, তবে ব্যবহারকারীকে ড্যাশবোর্ড পেজে রিডাইরেক্ট করা হয়।

Authorization (অথরাইজেশন) কি?

অথরাইজেশন প্রক্রিয়া হল, ব্যবহারকারীর ভুমিকা বা অনুমতি অনুযায়ী একটি সিস্টেমে কোন রিসোর্সে অ্যাক্সেস দেয়া হবে তা নির্ধারণ করা। এটা সাধারণত ব্যবহারকারীর রোল বা পারমিশন ভিত্তিক হয়। উদাহরণস্বরূপ, একজন অ্যাডমিন ইউজারকে সমস্ত পেজের অ্যাক্সেস থাকতে পারে, তবে একজন সাধারণ ইউজার কিছু নির্দিষ্ট পেজ বা অ্যাকশন অ্যাক্সেস করতে পারবে।

CakePHP তে Authorization এর জন্য Authorization প্লাগিন ব্যবহার করা হয়। এই প্লাগিনটি ব্যবহারকারীর অনুমতি যাচাই করতে সাহায্য করে এবং কন্ট্রোলার অ্যাকশনের উপর ভিত্তি করে বিভিন্ন রোল এবং পারমিশন পরিচালনা করে।


CakePHP তে Authorization কনফিগারেশন

১. Authorization প্লাগিন ইনস্টল করা

আপনাকে প্রথমে Authorization প্লাগিনটি ইনস্টল করতে হবে।

composer require cakephp/authorization

২. Authorization কম্পোনেন্ট লোড করা

এখন, AppController.php ফাইলে AuthorizationComponent লোড করতে হবে।

// src/Controller/AppController.php

namespace App\Controller;

use Cake\Controller\Controller;
use Authorization\Controller\Component\AuthorizationComponent;

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

        // Authorization কম্পোনেন্ট লোড করা
        $this->loadComponent('Authorization.Authorization');
    }
}

৩. অনুমতি যাচাই করা

অথরাইজেশন যাচাই করতে, কন্ট্রোলারের ভিতরে Authorization কম্পোনেন্টের authorize() মেথড ব্যবহার করা হয়। উদাহরণস্বরূপ, নিচের কোডে অ্যাডমিন রোলের জন্য কিছু অ্যাকশন প্রটেক্ট করা হয়েছে:

// src/Controller/PostsController.php

namespace App\Controller;

use App\Controller\AppController;

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

        // কেবল অ্যাডমিন রোলের জন্য অনুমতি
        $this->Authorization->skipAuthorization();
    }

    public function add()
    {
        // শুধুমাত্র অ্যাডমিন রোল ইউজার পোস্ট অ্যাড করতে পারবে
        if (!$this->Authorization->can('add')) {
            $this->Flash->error('You do not have permission to add posts');
            return $this->redirect(['action' => 'index']);
        }
        
        // পোস্ট অ্যাড করার কোড
    }

    public function edit($id)
    {
        // যদি রোল অনুমতি না দেয়, অ্যাক্সেস বন্ধ
        $post = $this->Posts->get($id);
        if (!$this->Authorization->can('edit', $post)) {
            $this->Flash->error('You do not have permission to edit this post');
            return $this->redirect(['action' => 'index']);
        }

        // পোস্ট আপডেট করার কোড
    }
}

এখানে, can() মেথড ব্যবহার করা হয়েছে যা অনুমতি যাচাই করে। আপনি এখানে পোস্ট অ্যাড বা এডিট করার অনুমতি চেক করছেন, এবং যদি অনুমতি না থাকে, তাহলে ইউজারকে একটি ত্রুটি বার্তা দিয়ে রিডাইরেক্ট করছেন।


Authentication এবং Authorization এর মধ্যে পার্থক্য

  • Authentication: এটি ব্যবহারকারীর পরিচয় যাচাই করে। এটি সাইন ইন প্রক্রিয়া, যেখানে ব্যবহারকারীর নাম এবং পাসওয়ার্ড যাচাই করা হয়।
  • Authorization: এটি ব্যবহারকারীর অনুমতি যাচাই করে, অর্থাৎ ব্যবহারকারী কোন রিসোর্স বা অ্যাকশন অ্যাক্সেস করতে পারবেন কি না তা নির্ধারণ করে।

CakePHP তে Authentication এবং Authorization ফিচারগুলি নিরাপদ এবং কার্যকরভাবে ব্যবহারকারীদের সাইন ইন এবং তাদের অ্যাক্সেস নিয়ন্ত্রণ করতে সহায়ক। Authentication প্লাগিনের মাধ্যমে ব্যবহারকারীর পরিচয় যাচাই করা যায়, এবং Authorization প্লাগিনের মাধ্যমে তাদের অনুমতি ও রোল অনুযায়ী অ্যাক্সেস নিয়ন্ত্রণ করা যায়। এই দুটি ফিচারই আপনার অ্যাপ্লিকেশনকে নিরাপদ এবং ইউজার ফ্রেন্ডলি করে তোলে।

Content added By

CakePHP-তে Authentication সিস্টেম সেটআপ করা একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা ইউজারদের সাইন ইন, সাইন আউট এবং তাদের অ্যাক্সেস কন্ট্রোল করার সুবিধা প্রদান করে। CakePHP-তে Authentication সিস্টেমের জন্য Authentication প্লাগইন ব্যবহৃত হয়, যা ৪.x ভার্সন থেকে অন্তর্ভুক্ত করা হয়েছে। এটি একটি অত্যন্ত ফ্লেক্সিবল এবং শক্তিশালী সিস্টেম, যা ইউজার অথেনটিকেশন সংক্রান্ত সমস্ত কাজ সহজ করে দেয়।


Authentication সিস্টেমের প্রয়োজনীয়তা

Authentication সিস্টেমের মাধ্যমে:

  1. ইউজারের পরিচয় যাচাই করা হয়, যেমন ইউজারের ইমেইল এবং পাসওয়ার্ড।
  2. অ্যাক্সেস কন্ট্রোল করা হয়, অর্থাৎ ইউজারের কোন অংশে অ্যাক্সেস থাকবে এবং কোন অংশে থাকবে না তা নির্ধারণ করা হয়।
  3. সেশন ম্যানেজমেন্ট করা হয়, যা ব্যবহারকারীর লগইন অবস্থান সংরক্ষণ করে।

CakePHP-তে Authentication সিস্টেম সেটআপ করার জন্য, Authentication প্লাগইন ইনস্টল এবং কনফিগার করতে হয়।


১. Authentication প্লাগইন ইনস্টল করা

CakePHP-তে Authentication প্লাগইন ব্যবহারের জন্য প্রথমে Composer দিয়ে এটি ইনস্টল করতে হবে:

composer require cakephp/authentication

ইনস্টল হওয়ার পর, প্লাগইনটি আপনার অ্যাপ্লিকেশনে স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হবে।


২. প্লাগইন লোড করা

পরবর্তী ধাপে, CakePHP অ্যাপ্লিকেশনের src/Application.php ফাইলে প্লাগইনটি লোড করতে হবে। এটি স্বয়ংক্রিয়ভাবে লোড হয়, তবে যদি না হয়ে থাকে, তাহলে এই কোডটি যোগ করতে হবে:

// src/Application.php
namespace App;

use Cake\Http\BaseApplication;
use Cake\Core\Configure;

class Application extends BaseApplication
{
    public function bootstrap(): void
    {
        parent::bootstrap();

        // Load the Authentication plugin
        $this->addPlugin('Authentication');
    }
}

এটি Authentication প্লাগইনকে অ্যাপ্লিকেশনে অন্তর্ভুক্ত করবে।


৩. Controller-এ Authentication কনফিগার করা

এখন, Authentication কনফিগার করতে হবে। এটি সাধারণত src/Controller/AppController.php ফাইলে করা হয়। এই ফাইলে, আপনি Authentication সিস্টেম ইনিশিয়ালাইজ করবেন এবং সেটিংস কনফিগার করবেন।

// src/Controller/AppController.php
namespace App\Controller;

use Cake\Controller\Controller;
use Cake\Event\EventInterface;
use Authentication\AuthenticationService;
use Authentication\AuthenticationServiceProviderInterface;

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

        // Authentication setup
        $this->loadComponent('Authentication.Authentication');
    }

    public function getAuthenticationService(): AuthenticationService
    {
        $authenticationService = new AuthenticationService();

        // Identify the user based on credentials
        $authenticationService->setConfig('identifiers', [
            'Authentication.Password',
            'Authentication.Session'
        ]);

        // Define authenticators (how authentication will happen)
        $authenticationService->setConfig('authenticators', [
            'Authentication.Form'
        ]);

        return $authenticationService;
    }
}

এখানে:

  • identifiers: এই অংশে Authentication.Password এবং Authentication.Session চয়ন করা হয়েছে, যা পাসওয়ার্ড এবং সেশন থেকে ইউজারকে শনাক্ত করবে।
  • authenticators: Authentication.Form ব্যবহার করে ফর্ম ভিত্তিক অথেনটিকেশন চালু করা হয়েছে।

৪. Login কন্ট্রোলার এবং ভিউ তৈরি করা

এখন, লগইন পেজ তৈরি করা দরকার। প্রথমে একটি কন্ট্রোলার তৈরি করুন, যা ইউজারকে লগইন করতে সহায়তা করবে:

// src/Controller/UsersController.php
namespace App\Controller;

use App\Controller\AppController;

class UsersController extends AppController
{
    public function login()
    {
        $this->request->allowMethod(['get', 'post']);

        if ($this->request->is('post')) {
            $authenticationResult = $this->Authentication->getResult();

            if ($authenticationResult->isValid()) {
                // Redirect to dashboard if login is successful
                return $this->redirect(['controller' => 'Dashboard', 'action' => 'index']);
            }

            $this->Flash->error('Invalid username or password');
        }
    }
}

এখানে, লগইন পদ্ধতিটি POST রিকোয়েস্টে ইউজারের ইনপুট থেকে পাসওয়ার্ড যাচাই করবে এবং সঠিক হলে ড্যাশবোর্ড পেইজে রিডাইরেক্ট করবে।

পরবর্তী ধাপে, লগইন ফর্মটি তৈরি করুন:

// src/Template/Users/login.ctp
<?= $this->Form->create() ?>
<?= $this->Form->control('email', ['type' => 'email', 'label' => 'Email']) ?>
<?= $this->Form->control('password', ['type' => 'password', 'label' => 'Password']) ?>
<?= $this->Form->button(__('Login')) ?>
<?= $this->Form->end() ?>

এটি একটি সাধারণ লগইন ফর্ম তৈরি করবে যেখানে ইউজার তার ইমেইল এবং পাসওয়ার্ড দিয়ে লগইন করবে।


৫. ইউজার লগআউট কনফিগার করা

লগআউটের জন্য একটি নতুন অ্যাকশন তৈরি করুন, যা ইউজারকে সেশন থেকে লগ আউট করবে:

// src/Controller/UsersController.php
public function logout()
{
    $this->Authentication->logout();
    return $this->redirect('/');
}

এটি ইউজারকে লগআউট করে হোম পেজে রিডাইরেক্ট করবে।


৬. প্রটেক্টেড পেজে Authentication প্রয়োগ করা

আপনি চাইলে নির্দিষ্ট পেজে ইউজারের লগইন নিশ্চিত করতে পারেন। এর জন্য কন্ট্রোলার অ্যাকশনে Authentication চেক করতে হবে:

// src/Controller/PostsController.php
public function initialize(): void
{
    parent::initialize();
    $this->Authentication->addAuthenticationService();
}

public function index()
{
    $user = $this->Authentication->getIdentity();
    if (!$user) {
        return $this->redirect(['controller' => 'Users', 'action' => 'login']);
    }
}

এখানে, index() অ্যাকশন ইউজারের লগইন চেক করবে। যদি ইউজার লগইন না থাকে, তবে তাকে লগইন পেজে রিডাইরেক্ট করবে।


CakePHP-তে Authentication সিস্টেম সেটআপ করা ইউজারের সাইন ইন, সাইন আউট এবং অ্যাক্সেস কন্ট্রোল করার জন্য অত্যন্ত কার্যকর। Authentication প্লাগইন ব্যবহার করে, আপনি সহজেই ইউজারের অথেনটিকেশন সিস্টেম তৈরি করতে পারেন। এই সিস্টেমে আপনি ফর্ম-বেসড অথেনটিকেশন, সেশন ম্যানেজমেন্ট, এবং প্রটেক্টেড পেজে অ্যাক্সেস কন্ট্রোল করতে পারেন। CakePHP-তে Authentication সেটআপ করা সাইটের নিরাপত্তা এবং ইউজার এক্সপিরিয়েন্সের জন্য অত্যন্ত গুরুত্বপূর্ণ।

Content added By

Authentication (অথেনটিকেশন) একটি ওয়েব অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি নিশ্চিত করে যে শুধুমাত্র বৈধ ব্যবহারকারীরা অ্যাপ্লিকেশনের বিভিন্ন ফিচার অ্যাক্সেস করতে পারে। কেকপিএইচপি (CakePHP) তে Authentication সিস্টেম সেটআপ করতে বিভিন্ন প্লাগইন ব্যবহৃত হয়, যেমন OAuth এবং JWT (JSON Web Token)। এই দুটি জনপ্রিয় অথেনটিকেশন মেথড ওয়েব অ্যাপ্লিকেশনে সিকিউরিটি বৃদ্ধি করতে সহায়ক।


১. OAuth Authentication

OAuth (Open Authorization) একটি জনপ্রিয় অথেনটিকেশন এবং অথোরাইজেশন প্রোটোকল যা ব্যবহারকারীদের তাদের একাউন্ট থেকে তথ্য নিরাপদে শেয়ার করার সুযোগ দেয়। এটি সাধারণত থার্ড-পার্টি অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়, যেমন গুগল, ফেসবুক, এবং গিটহাব লগইন। OAuth ব্যবহার করে আপনি ব্যবহারকারীর তথ্য এবং অ্যাক্সেস পারমিশনগুলি নিরাপদে শেয়ার করতে পারেন।

১.১. OAuth এর কাজের পদ্ধতি

OAuth সাধারণত তিনটি প্রধান অংশে বিভক্ত:

  1. Resource Owner (ব্যবহারকারী): যিনি লগইন করেন এবং অ্যাক্সেস অনুমতি দেন।
  2. Client (অ্যাপ্লিকেশন): যে অ্যাপ্লিকেশন OAuth মাধ্যমে অনুমতি নেয়।
  3. Authorization Server (অথরাইজেশন সার্ভার): যেখানে অ্যাক্সেস টোকেন তৈরি এবং যাচাই করা হয়।

OAuth এর মাধ্যমে, যখন ব্যবহারকারী তাদের তৃতীয় পক্ষের একাউন্টের মাধ্যমে লগইন করেন, তখন অ্যাপ্লিকেশনটি ব্যবহারকারীর অনুমতি নিয়ে এক্সেস টোকেন পায়, যা পরবর্তীতে API বা রিসোর্স অ্যাক্সেস করতে ব্যবহৃত হয়।

১.২. CakePHP তে OAuth Authentication ইমপ্লিমেন্ট করা

CakePHP তে OAuth ইন্টিগ্রেট করতে সাধারণত SocialAuth বা OAuth2 প্লাগইন ব্যবহার করা হয়। নিচে কিছু ধাপ দেওয়া হলো যা OAuth Authentication সেটআপে সাহায্য করবে।

  1. প্রথমে, CakePHP এর জন্য OAuth2 বা SocialAuth প্লাগইন ইনস্টল করুন।

    composer require cakephp/oauth2
    
  2. কনফিগারেশন ফাইলে OAuth2 সিস্টেম কনফিগার করুন:

    // config/app.php
    'OAuth2' => [
        'client_id' => 'your-client-id',
        'client_secret' => 'your-client-secret',
        'redirect_uri' => 'your-redirect-uri',
        'authorization_url' => 'https://provider.com/oauth/authorize',
        'token_url' => 'https://provider.com/oauth/token',
    ]
    
  3. কন্ট্রোলারে OAuth অথেনটিকেশন প্রক্রিয়া ইমপ্লিমেন্ট করুন:

    // src/Controller/SocialAuthController.php
    use Cake\Controller\Controller;
    
    class SocialAuthController extends Controller
    {
        public function login()
        {
            $oauth = new OAuth2Service($this->request->getData());
            $token = $oauth->getAccessToken();
            // Token ব্যবহার করে ব্যবহারকারী ডাটা সংগ্রহ
        }
    }
    

এখানে, আপনি OAuth সার্ভিস ব্যবহার করে ব্যবহারকারী ডেটা ফেচ করতে পারেন এবং ব্যবহারকারীকে আপনার সিস্টেমে লগইন করতে পারবেন।


২. JWT Authentication

JWT (JSON Web Token) একটি স্ট্যান্ডার্ড যা ওয়েব অ্যাপ্লিকেশনগুলোর মধ্যে সিকিউরড অথেনটিকেশন এবং অথোরাইজেশন কন্ট্রোল সরবরাহ করে। JWT মূলত একটি এনকোডেড টোকেন হিসেবে কাজ করে, যা ব্যবহারকারীর সেশন সম্পর্কে তথ্য ধারণ করে এবং এটি সার্ভার ও ক্লায়েন্টের মধ্যে শেয়ার করা যায়।

২.১. JWT এর কাজের পদ্ধতি

JWT তে তিনটি অংশ থাকে:

  1. Header: টোকেনের ধরন এবং সিগনেচার এলগোরিদম নির্দেশ করে।
  2. Payload: ব্যবহারকারী সম্পর্কিত তথ্য বা ক্লেইম ধারণ করে।
  3. Signature: টোকেনের নিরাপত্তা নিশ্চিত করতে একটি সিগনেচার তৈরি করা হয়।

JWT সাধারণত একটি HTTP হেডারে অ্যাপ্লিকেশন সার্ভারের কাছে পাঠানো হয় এবং তা ব্যবহারকারীকে যাচাই করতে ব্যবহৃত হয়।

২.২. CakePHP তে JWT Authentication ইমপ্লিমেন্ট করা

CakePHP তে JWT Authentication প্লাগইন হিসেবে ADmad/cakephp-jwt-auth ব্যবহার করা হয়। এটি JWT টোকেনের মাধ্যমে ব্যবহারকারী অথেনটিকেশন সম্পাদন করে।

  1. প্রথমে cakephp-jwt-auth প্লাগইন ইনস্টল করুন।

    composer require admad/cakephp-jwt-auth
    
  2. কনফিগারেশন ফাইলে JWT সেটআপ করুন:

    // config/app.php
    'Jwt' => [
        'secret_key' => 'your-secret-key',
        'algorithm' => 'HS256', // JWT সিগনেচার এলগোরিদম
    ]
    
  3. কন্ট্রোলারে JWT অথেনটিকেশন প্রক্রিয়া ইমপ্লিমেন্ট করুন:

    // src/Controller/UsersController.php
    namespace App\Controller;
    
    use Cake\Controller\Controller;
    use Firebase\JWT\JWT;
    
    class UsersController extends Controller
    {
        public function login()
        {
            // ইউজার নাম এবং পাসওয়ার্ড যাচাই
            $user = $this->Users->find('all')->where(['email' => $this->request->getData('email')])->first();
    
            if ($user && password_verify($this->request->getData('password'), $user->password)) {
                // JWT টোকেন তৈরি করা
                $key = 'your-secret-key';
                $payload = [
                    'sub' => $user->id,
                    'email' => $user->email,
                    'exp' => time() + 3600  // এক ঘণ্টার জন্য টোকেন বৈধ
                ];
    
                $jwt = JWT::encode($payload, $key);
    
                // টোকেন রিটার্ন করা
                $this->set(compact('jwt'));
            } else {
                // ভুল ক্রেডেনশিয়াল
                $this->response->statusCode(401);
                $this->set(compact('message'));
            }
        }
    }
    

এখানে:

  • JWT::encode(): ব্যবহারকারীর তথ্য দিয়ে একটি JWT টোকেন তৈরি করা হয়।
  • $payload: টোকেনের মধ্যে ব্যবহারকারীর আইডি, ইমেইল এবং এক্সপায়ারি টাইম উল্লেখ করা হয়।
  1. ক্লায়েন্ট সাইডে, এই JWT টোকেনটি হেডারে পাঠানো হয় এবং সার্ভার সেটি যাচাই করে। উদাহরণস্বরূপ, একটি API রিকোয়েস্টে:
Authorization: Bearer <jwt_token>

৩. OAuth এবং JWT এর মধ্যে পার্থক্য

৩.১. OAuth:

  • OAuth মূলত থার্ড-পার্টি অথেনটিকেশন ব্যবহৃত হয় (যেমন গুগল, ফেসবুক লগইন)।
  • ব্যবহারকারীর তথ্য শেয়ার করার জন্য এক্সেস টোকেন ব্যবহার করে।
  • ব্যবহারকারীর অ্যাক্সেস পারমিশন সীমিত থাকে এবং এটি সময়ের সাথে মেয়াদ উত্তীর্ণ হতে পারে।

৩.২. JWT:

  • JWT নিজেই একটি সিকিউরড টোকেন যা সার্ভার ও ক্লায়েন্টের মধ্যে এক্সচেঞ্জ হয়।
  • এটি স্ট্যান্ডার্ড JSON ফর্ম্যাটে তথ্য পাঠায় এবং এনকোড/ডিকোড করা হয়।
  • টোকেন একবার তৈরি হলে, এটি নির্দিষ্ট সময় পর্যন্ত কার্যকর থাকে এবং সার্ভার সাইডে স্টোর করা হয় না।

CakePHP তে Authentication প্লাগইন ব্যবহারের মাধ্যমে আপনি বিভিন্ন অথেনটিকেশন পদ্ধতি যেমন OAuth এবং JWT ইমপ্লিমেন্ট করতে পারেন। OAuth সাধারণত থার্ড-পার্টি লগইন সিস্টেমের জন্য ব্যবহৃত হয়, যেখানে JWT একটি সিকিউরড টোকেন ভিত্তিক অথেনটিকেশন সিস্টেম প্রদান করে। CakePHP তে এই পদ্ধতিগুলো সহজেই ব্যবহার করা সম্ভব এবং এগুলি অ্যাপ্লিকেশন সিকিউরিটি ও ইউজার এক্সপেরিয়েন্স উন্নত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে।

Content added By

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

CakePHP তে Access Control এবং Permission Management একটি গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে শুধুমাত্র অনুমোদিত ব্যবহারকারীরা নির্দিষ্ট রিসোর্সে প্রবেশ করতে পারে এবং নির্দিষ্ট কার্যাবলী সম্পাদন করতে পারে। CakePHP তে এধরণের কাজ করতে সাধারণত Authentication এবং Authorization ব্যবহৃত হয়।


Access Control (অ্যাক্সেস কন্ট্রোল) কি?

Access Control হলো একটি নিরাপত্তা ব্যবস্থা যা নির্ধারণ করে কোন ব্যবহারকারী বা গ্রুপ কিভাবে এবং কোথায় অ্যাপ্লিকেশন বা সিস্টেমের রিসোর্স অ্যাক্সেস করতে পারবে। এটি একটি ব্যবহারকারীর আইডেন্টিটি এবং তাদের অধিকার/অনুমতি অনুযায়ী পৃষ্ঠা বা রিসোর্স রেসপন্স করতে সাহায্য করে।

CakePHP তে Access Control অর্জন করতে Authentication এবং Authorization কম্পোনেন্ট দুটি গুরুত্বপূর্ণ ভূমিকা পালন করে।


Authentication (প্রমাণীকরণ) কম্পোনেন্ট

Authentication কম্পোনেন্টের মাধ্যমে ব্যবহারকারী সঠিকভাবে লগইন করেছে কিনা তা যাচাই করা হয়। এর মাধ্যমে আপনি ব্যবহারকারীদের লগইন প্রক্রিয়া পরিচালনা, সেশন ম্যানেজমেন্ট, এবং বিভিন্ন নিরাপত্তা নীতি প্রয়োগ করতে পারেন।

১. Authentication সেটআপ

প্রথমে Authentication কম্পোনেন্ট লোড করতে হয়:

// src/Controller/AppController.php
namespace App\Controller;

use Cake\Controller\Controller;

class AppController extends Controller
{
    public function initialize(): void
    {
        parent::initialize();
        $this->loadComponent('Authentication.Authentication');
    }
}

এখানে Authentication.Authentication কম্পোনেন্ট ব্যবহার করে লগইন প্রক্রিয়া শুরু করা হয়েছে।

২. লগইন অ্যাকশন

এখন আপনি ব্যবহারকারীকে লগইন করানোর জন্য একটি কন্ট্রোলার অ্যাকশন তৈরি করতে পারেন:

// src/Controller/UsersController.php
namespace App\Controller;

use Cake\Controller\Controller;

class UsersController extends AppController
{
    public function login()
    {
        $this->request->allowMethod(['post']);  // শুধুমাত্র POST পদ্ধতি অনুমোদিত

        $user = $this->Authentication->getIdentity();  // লগইন তথ্য পাওয়া যাবে

        if ($user) {
            // লগইন সফল হলে রিডিরেক্ট করা
            return $this->redirect(['controller' => 'Dashboard', 'action' => 'index']);
        }

        // যদি ভুল লগইন হয়
        $this->Flash->error('Invalid username or password');
    }
}

এখানে, Authentication->getIdentity() মেথড ব্যবহার করে লগইন তথ্য সংগ্রহ করা হয় এবং সফল হলে ব্যবহারকারীকে রিডিরেক্ট করা হয়।


Authorization (অনুমোদন) কম্পোনেন্ট

Authorization কম্পোনেন্ট ব্যবহারকারীর অ্যাক্সেসের অধিকার যাচাই করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে ব্যবহারকারী নির্দিষ্ট কন্ট্রোলার বা অ্যাকশন অ্যাক্সেস করতে পারে কিনা। সাধারণত, এটি ACL (Access Control List) বা রোল ভিত্তিক অনুমোদন সিস্টেম ব্যবহার করে কাজ করে।

৩. Authorization সেটআপ

এখানে Authorization কম্পোনেন্টটি Authentication এর সাথে যুক্ত করা হয়:

// src/Controller/AppController.php
namespace App\Controller;

use Cake\Controller\Controller;

class AppController extends Controller
{
    public function initialize(): void
    {
        parent::initialize();
        $this->loadComponent('Authentication.Authentication');
        $this->loadComponent('Authorization.Authorization');
    }
}

এখন Authorization কম্পোনেন্টটি কন্ট্রোলারের অ্যাকশনগুলোতে যাচাই করবে, কোন ব্যবহারকারী কীভাবে অ্যাক্সেস করতে পারে।

৪. Authorization কনফিগারেশন

আপনি Authorization সিস্টেম কনফিগার করে ব্যবহারকারী বা গ্রুপের অধিকার নির্ধারণ করতে পারেন। এটি সাধারণত কাস্টম policy ফাইলের মাধ্যমে করা হয়।

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

use App\Model\Entity\User;
use App\Model\Entity\Article;

class ArticlePolicy
{
    public function canView(User $user, Article $article)
    {
        // ইউজার যদি পাবলিক আর্টিকেল দেখতে চায়
        return true;
    }

    public function canEdit(User $user, Article $article)
    {
        // ইউজার যদি নিজের আর্টিকেল এডিট করতে চায়
        return $user->id === $article->user_id;
    }
}

এখানে:

  • canView() এবং canEdit() মেথড ব্যবহার করে যাচাই করা হয় যে একটি নির্দিষ্ট ব্যবহারকারী একটি আর্টিকেল দেখতে বা সম্পাদনা করতে পারবে কিনা।

এটি কন্ট্রোলারে ব্যবহার করা হয়:

// src/Controller/ArticlesController.php
namespace App\Controller;

use App\Controller\AppController;

class ArticlesController extends AppController
{
    public function view($id = null)
    {
        $article = $this->Articles->get($id);

        // Authorization চেক
        $this->Authorization->authorize($article, 'canView');

        $this->set(compact('article'));
    }

    public function edit($id = null)
    {
        $article = $this->Articles->get($id);

        // Authorization চেক
        $this->Authorization->authorize($article, 'canEdit');

        // এর পরের লজিক...
    }
}

এখানে:

  • $this->Authorization->authorize() মেথডটি যাচাই করবে যে ব্যবহারকারী এই অ্যাকশনটি এক্সিকিউট করার অনুমতি পাবে কিনা।

কাস্টম পলিসি এবং রোল ভিত্তিক অনুমতি

CakePHP তে আপনি কাস্টম পলিসি তৈরি করে রোল ভিত্তিক অ্যাক্সেস কন্ট্রোল পরিচালনা করতে পারেন, যেখানে আপনি নির্দিষ্ট রোলের ব্যবহারকারীদের অনুমতি দিতে বা সীমাবদ্ধ করতে পারেন। আপনি যেমন Admin রোলের ব্যবহারকারীদের অ্যাডমিন প্যানেল অ্যাক্সেস দিতে পারেন।

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

use App\Model\Entity\User;

class AdminPolicy
{
    public function canAccess(User $user)
    {
        return $user->role === 'admin';  // শুধুমাত্র অ্যাডমিন রোলের ইউজারদের অনুমতি
    }
}

এখন, আপনি Authorization কম্পোনেন্টে এই পলিসি ব্যবহার করতে পারেন।

// src/Controller/AdminController.php
namespace App\Controller;

use App\Controller\AppController;

class AdminController extends AppController
{
    public function initialize(): void
    {
        parent::initialize();
        $this->loadComponent('Authorization.Authorization');
    }

    public function index()
    {
        // কাস্টম পলিসি চেক
        $this->Authorization->authorize('Admin', 'canAccess');

        // অ্যাডমিন প্যানেল লজিক
    }
}

এখানে AdminPolicy ব্যবহার করে যাচাই করা হচ্ছে যে ব্যবহারকারী অ্যাডমিন রোলের অধিকারী কি না।


ACL (Access Control List) ব্যবহারের মাধ্যমে Permission Management

CakePHP তে ACL (Access Control List) ব্যবহার করে আপনি আরও উন্নত Permission Management তৈরি করতে পারেন, যেখানে আপনি প্রতিটি রোলের জন্য নির্দিষ্ট কার্যাবলীর অনুমতি প্রদান বা অস্বীকার করতে পারেন।

CakePHP তে ACL কনফিগার করতে AclComponent ব্যবহার করা হয়, তবে এটি আরো কনফিগারেশন এবং কাস্টমাইজেশন প্রক্রিয়া জড়িত।


CakePHP তে Access Control এবং Permission Management নিরাপত্তা নিশ্চিত করতে অত্যন্ত গুরুত্বপূর্ণ। Authentication এবং Authorization কম্পোনেন্ট ব্যবহার করে আপনি ব্যবহারকারীর লগইন প্রক্রিয়া এবং অনুমতি যাচাই করতে পারেন। কাস্টম Policy ফাইলের মাধ্যমে আপনি সহজেই রোল ভিত্তিক অ্যাক্সেস কন্ট্রোল বাস্তবায়ন করতে পারেন এবং ব্যবহারকারীকে নির্দিষ্ট রিসোর্স বা অ্যাকশন অ্যাক্সেসের অনুমতি বা নিষেধাজ্ঞা দিতে পারেন। ACL ব্যবহারের মাধ্যমে আরো উন্নত Permission Management তৈরি করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...