Route Filters CodeIgniter-এ একটি শক্তিশালী বৈশিষ্ট্য, যা নির্দিষ্ট Routes-এ কার্যকলাপ সম্পাদনের আগে বা পরে কোড চালানোর সুযোগ দেয়। এটি সাধারণত Authentication, Authorization, Logging, অথবা অন্য কোনো প্রি-প্রসেসিং বা পোস্ট-প্রসেসিং কাজের জন্য ব্যবহৃত হয়।
Route Filter এর ব্যবহার
Route Filter এর প্রধান কাজ হলো:
- নির্দিষ্ট Route-এ রেস্ট্রিকশন (যেমন: লগইন চেক করা) যুক্ত করা।
- রিকোয়েস্ট প্রক্রিয়ার সময় কোড চালানো।
- 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 ব্যবহার করে আপনি:
- নির্দিষ্ট Routes-এ Authentication এবং Authorization কার্যকর করতে পারেন।
- Route Group-এর জন্য নিরাপত্তা নীতি তৈরি করতে পারেন।
- অ্যাপ্লিকেশনের নিরাপত্তা এবং কার্যক্ষমতা উন্নত করতে পারেন।
CodeIgniter-এর Filter সিস্টেম আপনাকে সহজে অ্যাপ্লিকেশন নিরাপত্তা এবং রিকোয়েস্ট পরিচালনা করতে সহায়তা করে।