Role-based Access Control (RBAC) এবং Permissions Management হল নিরাপত্তা ব্যবস্থাপনা কৌশল যা সিস্টেমে বিভিন্ন রকমের ইউজার এবং তাদের অনুমতি (permissions) নির্ধারণ করতে ব্যবহৃত হয়। এই কৌশলটি সাধারণত অ্যাপ্লিকেশনের নিরাপত্তা এবং ইউজার অ্যাক্সেস কন্ট্রোলকে সংগঠিত ও সহজ করে তোলে।
ExpressJS-এ RBAC এবং permissions ব্যবস্থাপনা প্রতিষ্ঠা করা অত্যন্ত গুরুত্বপূর্ণ যখন আপনাকে অ্যাপ্লিকেশনে বিভিন্ন ধরনের ইউজারকে বিভিন্ন স্তরের অ্যাক্সেস প্রদান করতে হয়। উদাহরণস্বরূপ, অ্যাডমিন, মডারেটর, এবং সাধারণ ইউজারের জন্য বিভিন্ন রকমের অনুমতি নির্ধারণ করা।
RBAC কি?
Role-based Access Control (RBAC) একটি নিরাপত্তা কৌশল যেখানে ইউজারদের বিভিন্ন roles (ভূমিকা) অনুযায়ী অ্যাক্সেস অনুমতি (permissions) প্রদান করা হয়। RBAC-এ মূলত দুটি উপাদান থাকে:
- Roles: বিভিন্ন ধরনের ভূমিকা (যেমন:
Admin,User,Moderator) যা ইউজারের অ্যাক্সেস স্তর নির্ধারণ করে। - Permissions: নির্দিষ্ট রিসোর্স বা অ্যাকশনগুলিতে অ্যাক্সেস প্রদানকারী অনুমতি। প্রতিটি ভূমিকার জন্য আলাদা আলাদা অনুমতি থাকতে পারে।
RBAC ব্যবহারের মাধ্যমে একটি সিস্টেমে ইউজারদের পৃথক পৃথক রোল অনুযায়ী বিভিন্ন অ্যাক্সেস প্রদান করা হয়। এটি একটি নিরাপত্তা স্তর তৈরির পাশাপাশি অ্যাপ্লিকেশনের মেইনটেনেন্স সহজ করে তোলে।
ExpressJS-এ RBAC এবং Permissions পরিচালনা করা
ExpressJS-এ RBAC এবং permissions পরিচালনা করতে আপনাকে সাধারণত middleware তৈরি করতে হবে, যা ইউজারের রোল যাচাই করবে এবং নির্দিষ্ট রাউটে অ্যাক্সেস নিয়ন্ত্রণ করবে।
১. Role-based Access Control (RBAC) উদাহরণ
১.১. RBAC ইমপ্লিমেন্টেশন
ধরা যাক, আমাদের দুটি রোল রয়েছে:
- Admin: পূর্ণ অ্যাক্সেস রয়েছে।
- User: শুধুমাত্র নির্দিষ্ট রিসোর্স অ্যাক্সেস করতে পারবে।
প্রথমে, আমরা ইউজারের রোল নির্ধারণ করব এবং পরে তা যাচাই করব যে, ওই ইউজারের নির্দিষ্ট রাউটে অ্যাক্সেস রয়েছে কি না।
const express = require('express');
const app = express();
const port = 3000;
// Dummy ইউজার ডাটা
const users = [
{ id: 1, username: 'admin', role: 'Admin' },
{ id: 2, username: 'user1', role: 'User' }
];
// Middleware: রোল যাচাই করা
function checkRole(requiredRole) {
return (req, res, next) => {
const user = users.find(u => u.username === req.body.username);
if (user && user.role === requiredRole) {
return next(); // রোল মিললে পরবর্তী middleware বা রাউটে যাও
} else {
return res.status(403).send('Access Denied');
}
};
}
// Admin রাউট
app.get('/admin', checkRole('Admin'), (req, res) => {
res.send('Welcome Admin!');
});
// User রাউট
app.get('/user', checkRole('User'), (req, res) => {
res.send('Welcome User!');
});
// সাধারণ রাউট
app.get('/', (req, res) => {
res.send('Welcome to the Home page');
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
কোড ব্যাখ্যা:
checkRole(requiredRole): একটি কাস্টম middleware ফাংশন যা ইউজারের রোল যাচাই করে। যদি রোল মেলে, তবে এটিnext()ফাংশন কল করে পরবর্তী middleware বা রাউট হ্যান্ডলারকে কল করে। অন্যথায়, একটি403 Access Deniedরেসপন্স পাঠানো হয়।/adminএবং/userরাউটে বিভিন্ন রোলের জন্য অ্যাক্সেস কন্ট্রোল করা হচ্ছে।
২. Permissions Management
Permissions হল ইউজারের রোলের অধীনে কী কী কাজ করতে পারবে তা নির্ধারণ করে। প্রতিটি রোলের জন্য নির্দিষ্ট অ্যাকশন বা রিসোর্সের উপর permissions থাকতে পারে।
২.১. Permissions উদাহরণ
ধরা যাক, অ্যাডমিনের জন্য create, read, update, delete (CRUD) permissions থাকতে পারে, কিন্তু ইউজারের জন্য শুধুমাত্র read permission থাকতে পারে।
ব্যবহার:
const permissions = {
Admin: ['create', 'read', 'update', 'delete'],
User: ['read']
};
// Middleware: Permissions যাচাই
function checkPermission(permission) {
return (req, res, next) => {
const user = users.find(u => u.username === req.body.username);
if (user && permissions[user.role].includes(permission)) {
return next(); // Permission থাকলে পরবর্তী middleware বা রাউট
} else {
return res.status(403).send('Permission Denied');
}
};
}
// Admin create রাউট
app.post('/create', checkPermission('create'), (req, res) => {
res.send('Create operation performed');
});
// User read রাউট
app.get('/read', checkPermission('read'), (req, res) => {
res.send('Read operation performed');
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
কোড ব্যাখ্যা:
checkPermission(permission): এই middleware ইউজারের রোল অনুযায়ী তার permissions চেক করে। যদি ইউজারের পছন্দসই permission থাকে, তবে পরবর্তী ফাংশন কল হয়, অন্যথায় 403 রেসপন্স দেওয়া হয়।
৩. Dynamic Role-based Access Control
আরও উন্নত RBAC সিস্টেমে, ইউজারের রোল এবং permissions ডাটাবেজে সংরক্ষণ করা হয় এবং সেগুলো ডাইনামিকভাবে কনফিগার করা হয়। এতে ইউজারের অ্যাক্সেস কন্ট্রোলের মান আরও ফ্লেক্সিবল এবং পরিবর্তনযোগ্য হয়।
উদাহরণ:
// Dummy DB সিমুলেশন
let roles = {
Admin: ['create', 'read', 'update', 'delete'],
User: ['read']
};
let users = [
{ username: 'admin', role: 'Admin' },
{ username: 'user1', role: 'User' }
];
// রোল পরিবর্তন ফাংশন
function updateRole(username, newRole) {
const user = users.find(u => u.username === username);
if (user) {
user.role = newRole;
}
}
// Permissions যাচাই
function checkPermissions(permission) {
return (req, res, next) => {
const user = users.find(u => u.username === req.body.username);
if (user && roles[user.role].includes(permission)) {
return next();
} else {
return res.status(403).send('Permission Denied');
}
};
}
// রাউট সেটআপ
app.post('/create', checkPermissions('create'), (req, res) => {
res.send('Create operation performed');
});
app.get('/read', checkPermissions('read'), (req, res) => {
res.send('Read operation performed');
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
এখানে, ইউজারের রোল পরিবর্তন করা যেতে পারে এবং সেই অনুযায়ী permissions অ্যাক্সেস নিয়ন্ত্রণ করা হয়।
সারাংশ
Role-based Access Control (RBAC) এবং Permissions Management ExpressJS-এ একটি শক্তিশালী নিরাপত্তা কৌশল। RBAC ইউজারের রোলের ভিত্তিতে অ্যাক্সেস কন্ট্রোল পরিচালনা করতে সাহায্য করে, এবং Permissions ইউজারের নির্দিষ্ট অ্যাক্সেস অনুমতি নির্ধারণ করে। ExpressJS-এ, আপনি কাস্টম middleware ব্যবহার করে রোল এবং permissions যাচাই করতে পারেন এবং অ্যাপ্লিকেশনটির নিরাপত্তা এবং ইউজার অ্যাক্সেস কন্ট্রোল আরও উন্নত করতে পারেন।
Read more