Route ফিল্টার এবং রেসট্রিকশন

Web Development - কোডইগনাইটার (Codeigniter) - CodeIgniter Routing |

Route Filters CodeIgniter-এ একটি শক্তিশালী বৈশিষ্ট্য, যা নির্দিষ্ট Routes-এ কার্যকলাপ সম্পাদনের আগে বা পরে কোড চালানোর সুযোগ দেয়। এটি সাধারণত Authentication, Authorization, Logging, অথবা অন্য কোনো প্রি-প্রসেসিং বা পোস্ট-প্রসেসিং কাজের জন্য ব্যবহৃত হয়।


Route Filter এর ব্যবহার

Route Filter এর প্রধান কাজ হলো:

  1. নির্দিষ্ট Route-এ রেস্ট্রিকশন (যেমন: লগইন চেক করা) যুক্ত করা।
  2. রিকোয়েস্ট প্রক্রিয়ার সময় কোড চালানো।
  3. Route গুলোর জন্য অতিরিক্ত নিরাপত্তা বা কার্যক্ষমতা যোগ করা।

Route Filter সেটআপ

১. Filter তৈরি

Filter তৈরি করতে app/Filters ডিরেক্টরিতে একটি নতুন ক্লাস তৈরি করুন। উদাহরণস্বরূপ, একটি AuthFilter তৈরি করা যাক:

<?php

namespace App\Filters;

use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;

class AuthFilter implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        // Authentication চেক
        if (! session()->get('isLoggedIn')) {
            return redirect()->to('/login');
        }
    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        // কোনো অ্যাকশনের পরে কাজ করতে চাইলে এখানে কোড যোগ করুন
    }
}

২. Filter নিবন্ধন

Filter নিবন্ধন করতে app/Config/Filters.php ফাইল এডিট করুন:

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Filters extends BaseConfig
{
    public $aliases = [
        'auth' => \App\Filters\AuthFilter::class,
    ];

    public $globals = [
        'before' => [],
        'after' => [],
    ];

    public $methods = [];

    public $filters = [];
}

৩. Route-এ Filter যুক্ত করা

Route-এ Filter যোগ করতে app/Config/Routes.php ফাইল এডিট করুন:

নির্দিষ্ট Route-এর জন্য Filter
$routes->get('dashboard', 'Dashboard::index', ['filter' => 'auth']);
Route Group-এর জন্য Filter
$routes->group('admin', ['filter' => 'auth'], function ($routes) {
    $routes->get('dashboard', 'Admin::dashboard');
    $routes->get('users', 'Admin::users');
});

Route Restriction (নিষেধাজ্ঞা)

Route Restriction সাধারণত Authentication এবং Authorization চেকের জন্য ব্যবহৃত হয়।

উদাহরণ: Authentication Restriction

Controller এর নির্দিষ্ট মেথডে Filter যুক্ত করুন:

$routes->get('profile', 'User::profile', ['filter' => 'auth']);

Filter ফাইলের before() মেথডে চেক করুন:

public function before(RequestInterface $request, $arguments = null)
{
    if (! session()->get('isLoggedIn')) {
        return redirect()->to('/login');
    }
}

উদাহরণ: Role-Based Authorization

নির্দিষ্ট রোল চেক করে Route Restriction যুক্ত করা যায়।

Filter:

public function before(RequestInterface $request, $arguments = null)
{
    $role = session()->get('role');

    if ($role !== 'admin') {
        return redirect()->to('/not-authorized');
    }
}

Route:

$routes->get('admin', 'Admin::index', ['filter' => 'auth']);

Filter ব্যবহার করার ধরন

Global Filters

সব Route-এ before বা after ফিল্টার চালানোর জন্য ব্যবহার করা হয়।

app/Config/Filters.php ফাইল:

public $globals = [
    'before' => ['auth'], // সমস্ত রিকোয়েস্টের আগে 'auth' চালাবে
    'after' => [],
];

Method-Specific Filters

GET, POST, PUT, DELETE ইত্যাদি HTTP মেথডের জন্য আলাদা Filter চালানো যায়।

public $methods = [
    'post' => ['csrf'], // POST মেথডের জন্য 'csrf' ফিল্টার চালাবে
];

Specific Route Filters

নির্দিষ্ট Route-এ Filter চালানোর জন্য ব্যবহৃত হয় (উপরের উদাহরণ অনুযায়ী)।


Common Scenarios

১. CSRF Protection

Cross-Site Request Forgery (CSRF) এর সুরক্ষার জন্য একটি Filter:

public $aliases = [
    'csrf' => \CodeIgniter\Filters\CSRF::class,
];

Route-এ যোগ করুন:

$routes->post('form-submit', 'FormController::submit', ['filter' => 'csrf']);

২. IP Restriction

নির্দিষ্ট IP থেকে রিকোয়েস্ট সীমাবদ্ধ করার জন্য একটি Filter তৈরি করুন:

public function before(RequestInterface $request, $arguments = null)
{
    $allowedIps = ['127.0.0.1', '192.168.0.1'];
    $ip = $request->getIPAddress();

    if (! in_array($ip, $allowedIps)) {
        return redirect()->to('/not-authorized');
    }
}

ডিবাগিং এবং লগিং

Filter চালানোর সময় কোনো সমস্যা হলে CodeIgniter এর Debug Toolbar ব্যবহার করে লজিক পরীক্ষা করুন।

log_message('debug', 'Filter executed successfully.');

সারাংশ

Route Filter এবং Restriction ব্যবহার করে আপনি:

  1. নির্দিষ্ট Routes-এ Authentication এবং Authorization কার্যকর করতে পারেন।
  2. Route Group-এর জন্য নিরাপত্তা নীতি তৈরি করতে পারেন।
  3. অ্যাপ্লিকেশনের নিরাপত্তা এবং কার্যক্ষমতা উন্নত করতে পারেন।

CodeIgniter-এর Filter সিস্টেম আপনাকে সহজে অ্যাপ্লিকেশন নিরাপত্তা এবং রিকোয়েস্ট পরিচালনা করতে সহায়তা করে।

Content added By
Promotion