User Roles এবং Permissions ব্যবস্থাপনা একটি ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোলের জন্য অত্যন্ত গুরুত্বপূর্ণ। CodeIgniter এ User Roles এবং Permissions ম্যানেজ করা সাধারণত ডাটাবেসে ইউজার, রোল এবং পারমিশন সম্পর্কিত টেবিল তৈরি করে পরিচালনা করা হয়।
এখানে, আমরা দেখবো কীভাবে Roles এবং Permissions সিস্টেম তৈরি করা যায়, যা ইউজারের অ্যাক্সেস নিয়ন্ত্রণে সহায়ক।
প্রথমে ডাটাবেসে তিনটি টেবিল তৈরি করা হবে:
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(100) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`email` VARCHAR(100) NOT NULL,
`role_id` INT NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`)
);
CREATE TABLE `roles` (
`id` INT NOT NULL AUTO_INCREMENT,
`role_name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `permissions` (
`id` INT NOT NULL AUTO_INCREMENT,
`permission_name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
);
এটি roles এবং permissions টেবিলের মধ্যে সম্পর্ক তৈরি করবে।
CREATE TABLE `role_permissions` (
`role_id` INT NOT NULL,
`permission_id` INT NOT NULL,
FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`),
FOREIGN KEY (`permission_id`) REFERENCES `permissions`(`id`)
);
এখন আমরা CodeIgniter এর Model তৈরি করব, যা ডাটাবেসের টেবিল থেকে ডেটা সঠিকভাবে প্রসেস করবে।
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Role_model extends CI_Model {
public function get_roles() {
$query = $this->db->get('roles');
return $query->result();
}
public function get_permissions_by_role($role_id) {
$this->db->select('permissions.permission_name');
$this->db->from('role_permissions');
$this->db->join('permissions', 'permissions.id = role_permissions.permission_id');
$this->db->where('role_permissions.role_id', $role_id);
$query = $this->db->get();
return $query->result();
}
public function add_role($role_name) {
$data = ['role_name' => $role_name];
return $this->db->insert('roles', $data);
}
}
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Permission_model extends CI_Model {
public function get_permissions() {
$query = $this->db->get('permissions');
return $query->result();
}
public function add_permission($permission_name) {
$data = ['permission_name' => $permission_name];
return $this->db->insert('permissions', $data);
}
}
এখন আমরা একটি Controller তৈরি করব যা ইউজার রোল এবং পারমিশন নিয়ন্ত্রণ করবে।
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class RoleController extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('Role_model');
$this->load->model('Permission_model');
}
// রোলের তালিকা দেখান
public function index() {
$data['roles'] = $this->Role_model->get_roles();
$this->load->view('role_view', $data);
}
// রোল তৈরি করুন
public function create_role() {
$role_name = $this->input->post('role_name');
$this->Role_model->add_role($role_name);
redirect('rolecontroller');
}
// একটি রোলের পারমিশন দেখুন
public function role_permissions($role_id) {
$data['permissions'] = $this->Role_model->get_permissions_by_role($role_id);
$this->load->view('permissions_view', $data);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>User Roles</title>
</head>
<body>
<h1>User Roles</h1>
<form method="POST" action="<?php echo site_url('rolecontroller/create_role'); ?>">
<input type="text" name="role_name" placeholder="Role Name">
<input type="submit" value="Create Role">
</form>
<h2>Roles List</h2>
<ul>
<?php foreach ($roles as $role): ?>
<li>
<?php echo $role->role_name; ?>
<a href="<?php echo site_url('rolecontroller/role_permissions/'.$role->id); ?>">View Permissions</a>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Role Permissions</title>
</head>
<body>
<h1>Permissions</h1>
<ul>
<?php foreach ($permissions as $permission): ?>
<li><?php echo $permission->permission_name; ?></li>
<?php endforeach; ?>
</ul>
</body>
</html>
একটি রোলের জন্য পারমিশন অ্যাসাইন করতে, একটি নতুন টেবিল (role_permissions
) তৈরি করা হয়েছিল, যা রোল এবং পারমিশন সম্পর্কিত রেকর্ড সংরক্ষণ করে। আপনি role_permissions টেবিল ব্যবহার করে পারমিশন অ্যাসাইন করতে পারেন।
এই সিস্টেমটি সম্পূর্ণ করার জন্য Authentication এবং Authorization সিস্টেমও তৈরি করতে হবে। এর মাধ্যমে একটি ইউজারের লগইন তথ্য যাচাই করে, তার রোল এবং পারমিশন অনুযায়ী অ্যাক্সেস কন্ট্রোল করা যাবে।
CodeIgniter-এ User Roles এবং Permissions ম্যানেজ করার জন্য ডাটাবেসে রোল এবং পারমিশন সম্পর্কিত টেবিল তৈরি করা হয় এবং মডেল, কন্ট্রোলার, ভিউয়ের মাধ্যমে সেগুলো পরিচালনা করা হয়। এটি নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোলের জন্য একটি শক্তিশালী উপায়, যেখানে ইউজারের রোল অনুযায়ী অ্যাক্সেস নিয়ন্ত্রণ করা সম্ভব হয়।
Read more