Role-Based Access Control (RBAC) একটি নিরাপত্তা কৌশল যেখানে ব্যবহারকারীদের নির্দিষ্ট রোলের ভিত্তিতে কন্ট্রাক্টের বিভিন্ন ফাংশনে অ্যাক্সেস প্রদান করা হয়। এই কৌশলের মাধ্যমে, আপনি স্মার্ট কন্ট্রাক্টে বিভিন্ন রোলের জন্য অনুমতিগুলি নির্ধারণ করতে পারেন, যেমন অ্যাডমিন, ম্যানেজার, ইউজার ইত্যাদি।
Solidity তে RBAC ব্যবহার করে আপনি কন্ট্রাক্টের ভিতরে বিভিন্ন রোল নির্ধারণ করতে পারেন এবং কেবলমাত্র নির্দিষ্ট রোলধারী ব্যবহারকারীরা কিছু ফাংশন এক্সিকিউট করতে পারবেন।
উদাহরণ:
ধরা যাক, একটি কন্ট্রাক্টে তিনটি ভিন্ন রোল রয়েছে:
- Admin: যাদের কন্ট্রাক্টে সম্পূর্ণ নিয়ন্ত্রণ রয়েছে, তারা সমস্ত ফাংশন এক্সিকিউট করতে পারবে।
- Manager: যারা কিছু নির্দিষ্ট ফাংশন এক্সিকিউট করতে পারবে, তবে অ্যাডমিন কন্ট্রাক্টের কিছু কার্যক্রমের উপর পূর্ণ নিয়ন্ত্রণ রাখবে।
- User: সাধারণ ব্যবহারকারী যারা কেবল নির্দিষ্ট কার্যক্রম করতে পারবে।
এটি কিভাবে করা যেতে পারে তা নিচে দেখানো হলো:
pragma solidity ^0.8.0;
contract RBAC {
// রোলসমূহ
enum Role { Admin, Manager, User }
// ব্যবহারকারীদের রোল সংরক্ষণ
mapping(address => Role) public roles;
// কন্ট্রাক্টের মালিক (Admin)
address public owner;
// কন্ট্রাক্ট ডিপ্লয় করার সময় মালিককে অ্যাডমিন রোল দেওয়া হবে
constructor() {
owner = msg.sender;
roles[owner] = Role.Admin; // ডিপ্লয়মেন্টের সময় অ্যাডমিন রোল দেওয়া হয়েছে
}
// Modifier যেটি কেবল অ্যাডমিনদের জন্য
modifier onlyAdmin() {
require(roles[msg.sender] == Role.Admin, "You are not an Admin!");
_;
}
// Modifier যেটি কেবল ম্যানেজারদের জন্য
modifier onlyManager() {
require(roles[msg.sender] == Role.Manager, "You are not a Manager!");
_;
}
// Modifier যেটি কেবল ইউজারদের জন্য
modifier onlyUser() {
require(roles[msg.sender] == Role.User, "You are not a User!");
_;
}
// অ্যাডমিন রোল সেট করা
function setAdmin(address _account) public onlyAdmin {
roles[_account] = Role.Admin;
}
// ম্যানেজার রোল সেট করা
function setManager(address _account) public onlyAdmin {
roles[_account] = Role.Manager;
}
// ইউজার রোল সেট করা
function setUser(address _account) public onlyAdmin {
roles[_account] = Role.User;
}
// শুধুমাত্র অ্যাডমিনদের জন্য কিছু ফাংশন
function adminFunction() public onlyAdmin {
// অ্যাডমিনের জন্য এক্সিকিউটেবল ফাংশন
}
// শুধুমাত্র ম্যানেজারদের জন্য কিছু ফাংশন
function managerFunction() public onlyManager {
// ম্যানেজারের জন্য এক্সিকিউটেবল ফাংশন
}
// ইউজারের জন্য কিছু ফাংশন
function userFunction() public onlyUser {
// ইউজারের জন্য এক্সিকিউটেবল ফাংশন
}
}ব্যাখ্যা:
- Role Enum:
Roleনামক একটি enum ডিফাইন করা হয়েছে, যা Admin, Manager, এবং User রোলগুলোকে প্রতিনিধিত্ব করে।
- Mapping:
rolesনামক একটি mapping ব্যবহার করা হয়েছে, যা ব্যবহারকারীর ঠিকানা অনুযায়ী তাদের রোল সংরক্ষণ করে।
- Modifiers:
onlyAdmin: এই modifier নিশ্চিত করে যে শুধুমাত্র Admin রোলধারী ব্যবহারকারীরা নির্দিষ্ট ফাংশনগুলি কল করতে পারবেন।onlyManager: এই modifier নিশ্চিত করে যে শুধুমাত্র Manager রোলধারী ব্যবহারকারীরা নির্দিষ্ট ফাংশনগুলি কল করতে পারবেন।onlyUser: এই modifier নিশ্চিত করে যে শুধুমাত্র User রোলধারী ব্যবহারকারীরা নির্দিষ্ট ফাংশনগুলি কল করতে পারবেন।
- Access Control:
- কন্ট্রাক্টে
setAdmin,setManager,setUserফাংশন ব্যবহার করে বিভিন্ন ঠিকানাকে নির্দিষ্ট রোল প্রদান করা হয়। এই ফাংশনগুলো কেবলমাত্র Admin রোলধারী ব্যবহারকারী দ্বারা এক্সিকিউট করা যাবে। adminFunction,managerFunction, এবংuserFunctionযথাক্রমে Admin, Manager, এবং User রোলধারী ব্যবহারকারীদের জন্য এক্সিকিউটেবল ফাংশন।
- কন্ট্রাক্টে
RBAC এর সুবিধা:
- নিরাপত্তা: শুধুমাত্র নির্দিষ্ট রোলধারী ব্যবহারকারীরা নির্দিষ্ট ফাংশন এক্সিকিউট করতে সক্ষম হয়, যা নিরাপত্তা বৃদ্ধি করে।
- কন্ট্রোল: কন্ট্রাক্টে কে কী কাজ করতে পারবে, তা কন্ট্রোল করা সহজ হয়।
- এনফোর্সমেন্ট: কন্ট্রাক্টের মাধ্যমে রোলসমূহ এবং অ্যাক্সেস কন্ট্রোল এক্সিকিউট করার ফলে এটি একটি স্বয়ংক্রিয় নিরাপত্তা ব্যবস্থা তৈরি করে।
সারাংশ
Role-Based Access Control (RBAC) এর মাধ্যমে Solidity তে ব্যবহারকারীদের বিভিন্ন রোল ভিত্তিক এক্সেস প্রদান করা সম্ভব হয়। এই কৌশলটির মাধ্যমে কন্ট্রাক্টের কার্যক্রম এবং ফাংশনগুলোর নিরাপত্তা এবং নিয়ন্ত্রণ বৃদ্ধি করা যায়। ব্যবহারকারীদের নির্দিষ্ট রোল অনুযায়ী ফাংশন এক্সিকিউট করার অনুমতি প্রদান করা হয়, যা কন্ট্রাক্টের সুরক্ষা এবং কার্যকারিতা নিশ্চিত করে।
Read more