Role-Based Access Control (RBAC) হল একটি নিরাপত্তা কৌশল যা অ্যাপ্লিকেশনের ব্যবহারকারীদের মধ্যে ভিন্ন ভিন্ন ভূমিকা (roles) এবং তাদের অধিকার (permissions) নির্ধারণ করে। Rails অ্যাপ্লিকেশনে RBAC ইমপ্লিমেন্ট করার মাধ্যমে ব্যবহারকারীদের নির্দিষ্ট রিসোর্স বা অ্যাকশন অ্যাক্সেস দেওয়া এবং নিয়ন্ত্রণ করা যায়। এটি বিশেষ করে বড় অ্যাপ্লিকেশন বা ইন্টারপ্রাইজ-লেভেল অ্যাপ্লিকেশনে গুরুত্বপূর্ণ, যেখানে একাধিক ধরনের ব্যবহারকারী (যেমন: অ্যাডমিন, মডারেটর, সাধারণ ব্যবহারকারী) থাকেন এবং তাদের পৃথক অধিকার থাকতে পারে।
RBAC কীভাবে কাজ করে?
RBAC-এ ব্যবহারকারীদের বিভিন্ন ভূমিকা বা রোল দেওয়া হয়। প্রতিটি রোলের অধিকার বা পারমিশন কাস্টমাইজড হতে পারে, যা নির্ধারণ করে কোন ব্যবহারকারী কি করতে পারবেন। এই অধিকারগুলি সাধারণত তিনটি শ্রেণীতে বিভক্ত থাকে:
- Admin: সমস্ত ডেটা এবং কার্যক্রম অ্যাক্সেস করতে পারেন।
- Moderator: কিছু সীমিত অ্যাক্সেস রয়েছে, যেমন কন্টেন্ট মডারেট করা।
- User: সাধারণ ব্যবহারকারী যারা শুধু তাদের নিজস্ব তথ্য বা ডেটা অ্যাক্সেস করতে পারেন।
RBAC ইমপ্লিমেন্ট করার ধাপ
Ruby on Rails-এ RBAC ইমপ্লিমেন্ট করার জন্য প্রধানত roles নামক একটি অ্যাট্রিবিউট ব্যবহার করা হয়, যা ব্যবহারকারীর রোল সংরক্ষণ করে। সাধারণত, Rails-এ Devise বা Authlogic এর মতো authentication gems ব্যবহার করা হয়। এছাড়া, CanCanCan বা Pundit এর মতো authorization gems ব্যবহার করে অ্যাক্সেস কন্ট্রোল সহজে ইমপ্লিমেন্ট করা যায়।
ধাপ 1: User মডেলে Role অ্যাট্রিবিউট তৈরি করা
প্রথমে, User মডেলে একটি role অ্যাট্রিবিউট যোগ করা দরকার। এই জন্য একটি নতুন মাইগ্রেশন তৈরি করুন।
rails generate migration AddRoleToUsers role:string
এটি একটি মাইগ্রেশন ফাইল তৈরি করবে, যাতে role নামক একটি কলাম থাকবে।
class AddRoleToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :role, :string, default: 'user'
end
end
এখানে, role কলামটি ডিফল্টভাবে 'user' হবে, এবং আপনি পরে এটি আপডেট করে admin বা moderator হতে পারবেন।
rails db:migrate
ধাপ 2: Role গুলো সংজ্ঞায়িত করা
আপনার অ্যাপ্লিকেশনে বিভিন্ন রোলগুলিকে সুস্পষ্টভাবে সংজ্ঞায়িত করা উচিত। এটি সাধারণত মডেল লেভেলে করা হয়। User মডেলে enum ব্যবহার করে বিভিন্ন রোল কনফিগার করা যেতে পারে।
class User < ApplicationRecord
enum role: { user: 'user', admin: 'admin', moderator: 'moderator' }
end
এখন User মডেলটি রোল ভিত্তিক অ্যাক্সেস কন্ট্রোল করতে প্রস্তুত। enum ব্যবহার করে, আপনি সহজেই রোল নির্ধারণ এবং পরিবর্তন করতে পারবেন:
user = User.create(role: :admin)
user.admin? # true
user.user? # false
ধাপ 3: Authorization Logic যোগ করা
এখন যে ব্যবহারকারীরা বিভিন্ন রোলের অধিকারী, তাদের অ্যাক্সেস কন্ট্রোল করতে হবে। এখানে CanCanCan বা Pundit ব্যবহার করা যেতে পারে। এই টিউটোরিয়ালে আমরা CanCanCan ব্যবহার করব।
CanCanCan Gem ইনস্টল করা
প্রথমে, আপনার Gemfile-এ
cancancanযোগ করুন:gem 'cancancan'তারপর, bundle install চালান:
bundle installAbility ক্লাস তৈরি করা
CanCanCanব্যবহারের জন্য একটিAbilityক্লাস তৈরি করতে হবে, যা ব্যবহারকারীর রোল অনুযায়ী পারমিশন নির্ধারণ করে। এটিapp/models/ability.rbফাইলে থাকে।class Ability include CanCan::Ability def initialize(user) user ||= User.new # Guest user (not logged in) if user.admin? can :manage, :all elsif user.moderator? can :read, :all can :manage, Post else can :read, Post end end endএখানে:
- Admin ব্যবহারকারী সবকিছু ম্যানেজ করতে পারে।
- Moderator ব্যবহারকারী শুধু পোস্ট রিড এবং ম্যানেজ করতে পারে।
- User ব্যবহারকারী শুধুমাত্র পোস্ট রিড করতে পারে।
Controller-এ CanCanCan ব্যবহার করা
কন্ট্রোলারে আপনি
can?বাcannot?মেথড ব্যবহার করে অ্যাকশন পারমিশন চেক করতে পারেন।উদাহরণ:
class PostsController < ApplicationController load_and_authorize_resource def index @posts = Post.all end def show @post = Post.find(params[:id]) end endএখানে,
load_and_authorize_resourceস্বয়ংক্রিয়ভাবে রিসোর্স লোড এবং পারমিশন চেক করবে। আপনি যদি কাস্টম পারমিশন চেক করতে চান, তাহলেcan?মেথড ব্যবহার করতে পারেন।def update if can?(:update, @post) @post.update(post_params) else redirect_to posts_path, alert: "You don't have permission to update this post." end end
ধাপ 4: Authorization Views এ যোগ করা
আপনি আপনার ভিউতে কাস্টম পারমিশন চেকও করতে পারেন, যাতে শুধুমাত্র অনুমোদিত ব্যবহারকারীরা নির্দিষ্ট অ্যাকশন দেখতে পায়।
<% if can? :create, Post %>
<%= link_to 'Create Post', new_post_path %>
<% end %>
এখানে, শুধুমাত্র যদি ব্যবহারকারী পোস্ট তৈরি করার অনুমতি রাখে, তখনই "Create Post" লিঙ্কটি প্রদর্শিত হবে।
RBAC ব্যবস্থায় Role-based Permissions:
RBAC ইমপ্লিমেন্টের মাধ্যমে ব্যবহারকারীকে বিভিন্ন রোল দেওয়া হয়, যা তাদের কার্যক্রম সীমাবদ্ধ করে। নিচে একটি সাধারণ রোল-ভিত্তিক পারমিশন সিস্টেমের উদাহরণ দেওয়া হল:
| Role | Permissions |
|---|---|
| Admin | Manage everything |
| Moderator | Read and manage posts |
| User | Read posts |
এই কনসেপ্টের মাধ্যমে আপনি সহজেই ব্যবহারকারীর এক্সেস কন্ট্রোল করতে পারেন এবং অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করতে পারেন।
সারমর্ম
Role-Based Access Control (RBAC) ব্যবহারকারীদের নির্দিষ্ট রোলের ভিত্তিতে অ্যাক্সেস কন্ট্রোল করে। Rails-এ RBAC ইমপ্লিমেন্ট করার জন্য:
- User মডেলে
roleঅ্যাট্রিবিউট যোগ করা হয়। enumব্যবহার করে রোল গুলো সংজ্ঞায়িত করা হয়।- CanCanCan বা Pundit এর মতো gems ব্যবহার করে অ্যাক্সেস কন্ট্রোল কার্যকর করা হয়।
- কন্ট্রোলার এবং ভিউতে পারমিশন চেক করা হয়।
এভাবে, আপনি আপনার অ্যাপ্লিকেশনে বিভিন্ন ব্যবহারকারী রোল অনুযায়ী নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল নিশ্চিত করতে পারেন।
Read more