Role-Based Access Control (RBAC) ইমপ্লিমেন্ট করা

Authentication এবং Authorization Rails এ - রুবি অন রেইল (Ruby on Rails) - Web Development

314

Role-Based Access Control (RBAC) হল একটি নিরাপত্তা কৌশল যা অ্যাপ্লিকেশনের ব্যবহারকারীদের মধ্যে ভিন্ন ভিন্ন ভূমিকা (roles) এবং তাদের অধিকার (permissions) নির্ধারণ করে। Rails অ্যাপ্লিকেশনে RBAC ইমপ্লিমেন্ট করার মাধ্যমে ব্যবহারকারীদের নির্দিষ্ট রিসোর্স বা অ্যাকশন অ্যাক্সেস দেওয়া এবং নিয়ন্ত্রণ করা যায়। এটি বিশেষ করে বড় অ্যাপ্লিকেশন বা ইন্টারপ্রাইজ-লেভেল অ্যাপ্লিকেশনে গুরুত্বপূর্ণ, যেখানে একাধিক ধরনের ব্যবহারকারী (যেমন: অ্যাডমিন, মডারেটর, সাধারণ ব্যবহারকারী) থাকেন এবং তাদের পৃথক অধিকার থাকতে পারে।


RBAC কীভাবে কাজ করে?

RBAC-এ ব্যবহারকারীদের বিভিন্ন ভূমিকা বা রোল দেওয়া হয়। প্রতিটি রোলের অধিকার বা পারমিশন কাস্টমাইজড হতে পারে, যা নির্ধারণ করে কোন ব্যবহারকারী কি করতে পারবেন। এই অধিকারগুলি সাধারণত তিনটি শ্রেণীতে বিভক্ত থাকে:

  1. Admin: সমস্ত ডেটা এবং কার্যক্রম অ্যাক্সেস করতে পারেন।
  2. Moderator: কিছু সীমিত অ্যাক্সেস রয়েছে, যেমন কন্টেন্ট মডারেট করা।
  3. 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 ব্যবহার করব।

  1. CanCanCan Gem ইনস্টল করা

    প্রথমে, আপনার Gemfile-এ cancancan যোগ করুন:

    gem 'cancancan'
    

    তারপর, bundle install চালান:

    bundle install
    
  2. Ability ক্লাস তৈরি করা

    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 ব্যবহারকারী শুধুমাত্র পোস্ট রিড করতে পারে।
  3. 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 ইমপ্লিমেন্টের মাধ্যমে ব্যবহারকারীকে বিভিন্ন রোল দেওয়া হয়, যা তাদের কার্যক্রম সীমাবদ্ধ করে। নিচে একটি সাধারণ রোল-ভিত্তিক পারমিশন সিস্টেমের উদাহরণ দেওয়া হল:

RolePermissions
AdminManage everything
ModeratorRead and manage posts
UserRead posts

এই কনসেপ্টের মাধ্যমে আপনি সহজেই ব্যবহারকারীর এক্সেস কন্ট্রোল করতে পারেন এবং অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করতে পারেন।


সারমর্ম

Role-Based Access Control (RBAC) ব্যবহারকারীদের নির্দিষ্ট রোলের ভিত্তিতে অ্যাক্সেস কন্ট্রোল করে। Rails-এ RBAC ইমপ্লিমেন্ট করার জন্য:

  • User মডেলে role অ্যাট্রিবিউট যোগ করা হয়।
  • enum ব্যবহার করে রোল গুলো সংজ্ঞায়িত করা হয়।
  • CanCanCan বা Pundit এর মতো gems ব্যবহার করে অ্যাক্সেস কন্ট্রোল কার্যকর করা হয়।
  • কন্ট্রোলার এবং ভিউতে পারমিশন চেক করা হয়।

এভাবে, আপনি আপনার অ্যাপ্লিকেশনে বিভিন্ন ব্যবহারকারী রোল অনুযায়ী নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল নিশ্চিত করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...