Authorization এবং Permission Management হলো একটি অ্যাপ্লিকেশনে ব্যবহারকারীদের অ্যাক্সেস নিয়ন্ত্রণ এবং তাদের বিভিন্ন রিসোর্স বা কার্যাবলী ব্যবহারের অনুমতি নির্ধারণ করার প্রক্রিয়া। Ruby on Rails-এ এটি ব্যবহারকারীদের বিভিন্ন স্তরের প্রবেশাধিকার নিয়ন্ত্রণ করতে সাহায্য করে, যেমন—কোন ব্যবহারকারী কি অ্যাক্সেস করতে পারবে, কোন পৃষ্ঠা দেখতে পারবে বা কোন কাজ করতে পারবে।
Rails-এ Authorization সাধারণত ব্যবহারকারীকে একটি নির্দিষ্ট রোল বা স্তরের ভিত্তিতে তাদের অ্যাক্সেস দেয়, আর Permission Management ব্যবহারকারীদের বিভিন্ন কার্যাবলীর জন্য নির্দিষ্ট অনুমতি দেয়।
Authorization কী?
Authorization হল একটি প্রক্রিয়া যার মাধ্যমে নির্ধারিত হয় যে কোনো নির্দিষ্ট ব্যবহারকারী নির্দিষ্ট রিসোর্স বা কার্যাবলী অ্যাক্সেস করতে পারবে কিনা। এটি সাধারণত Authentication এর পরে ব্যবহৃত হয়। Authentication নিশ্চিত করে যে ব্যবহারকারী কে, এবং Authorization নির্ধারণ করে সেই ব্যবহারকারী কি কী করতে পারবে।
উদাহরণস্বরূপ, একটি অ্যাডমিনিস্ট্রেটর ব্যবহারকারী সমস্ত ডেটা অ্যাক্সেস এবং পরিবর্তন করতে পারবে, কিন্তু সাধারণ ব্যবহারকারী শুধুমাত্র তাদের নিজস্ব ডেটা দেখতে বা সংশোধন করতে পারবে।
Authorization পরিচালনার জন্য জনপ্রিয় Gem
Ruby on Rails-এ Authorization ব্যবস্থাপনা সহজ করতে অনেক গেম (gem) ব্যবহৃত হয়। সবচেয়ে জনপ্রিয় কিছু gem হল:
১. Pundit
Pundit একটি জনপ্রিয় gem যা Rails-এ authorization পরিচালনার জন্য ব্যবহৃত হয়। এটি ব্যবহারকারীর অ্যাক্সেস অনুমতি নির্ধারণ করতে "Policy" ক্লাস ব্যবহার করে। Pundit-এ প্রতিটি রিসোর্সের জন্য একটি policy তৈরি করা হয়, যা নির্ধারণ করে ব্যবহারকারী কীভাবে সে রিসোর্সটি ব্যবহার করতে পারবে।
Pundit ব্যবহারের উদাহরণ:
- Gem ইনস্টলেশন:
gem 'pundit'
- Bundle ইনস্টল করুন:
bundle install
- Policy তৈরি করা:
rails generate pundit:policy post
- Policy ক্লাস:
class PostPolicy < ApplicationPolicy
def show?
user.admin? || record.user == user
end
def update?
user.admin? || record.user == user
end
end
এখানে, show? এবং update? মেথড দুটি ব্যবহারকারীর অনুমতি যাচাই করে যে তারা পোস্টটি দেখবে বা আপডেট করবে কিনা।
- কন্ট্রোলারে পন্ডিত ব্যবহার:
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update]
def show
authorize @post # এই লাইনে পন্ডিত authorization পরিচালনা করবে
end
def update
authorize @post
if @post.update(post_params)
redirect_to @post
else
render :edit
end
end
end
- ভিউ (View) থেকে অনুমতি যাচাই:
<% if policy(@post).update? %>
<%= link_to 'Edit', edit_post_path(@post) %>
<% end %>
এখানে, policy(@post).update? যাচাই করবে ব্যবহারকারী এটি আপডেট করার অনুমতি পায় কিনা।
২. CanCanCan
CanCanCan আরেকটি জনপ্রিয় gem যা Rails-এ Authorization ব্যবস্থাপনা করে। এটি ব্যবহারকারীদের ভূমিকা (roles) এবং অনুমতিগুলি (permissions) সুনির্দিষ্ট ভাবে পরিচালনা করতে সহায়তা করে। CanCanCan-এর মাধ্যমে, আপনি সহজেই নিয়ন্ত্রণ করতে পারেন যে কোন ব্যবহারকারী কোন অ্যাকশন করতে পারবে।
CanCanCan ব্যবহারের উদাহরণ:
- Gem ইনস্টলেশন:
gem 'cancancan'
- Bundle ইনস্টল করুন:
bundle install
- Ability ক্লাস তৈরি করুন:
rails generate cancan:ability
Abilityক্লাস কনফিগার করুন:
class Ability
include CanCan::Ability
def initialize(user)
if user.admin?
can :manage, :all
else
can :read, :all
can :update, Post, user_id: user.id
end
end
end
এখানে, admin? মেথডটি চেক করে যে ব্যবহারকারী অ্যাডমিন কিনা, এবং সেই অনুযায়ী সমস্ত রিসোর্সে অ্যাক্সেস দেওয়া হয়।
- কন্ট্রোলারে CanCanCan ব্যবহার:
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update]
def show
authorize! :read, @post # CanCanCan দিয়ে অনুমতি যাচাই
end
def update
authorize! :update, @post
if @post.update(post_params)
redirect_to @post
else
render :edit
end
end
end
- ভিউতে অনুমতি যাচাই:
<% if can? :update, @post %>
<%= link_to 'Edit', edit_post_path(@post) %>
<% end %>
এখানে, can? :update, @post যাচাই করবে যে ব্যবহারকারী পোস্টটি আপডেট করতে পারবে কিনা।
Permission Management কী?
Permission Management হল ব্যবহারকারীদের ভূমিকা ও অনুমতিকে আরও বিস্তারিতভাবে নিয়ন্ত্রণ করার প্রক্রিয়া। এটা নিশ্চিত করে যে প্রতিটি ব্যবহারকারী কেবল তাদের নির্দিষ্ট কার্যাবলী বা রিসোর্সের উপরই নিয়ন্ত্রণ রাখে। Permission সাধারণত নির্ধারণ করা হয় ব্যবহারকারীর রোল অনুযায়ী, যেমন—admin, editor, guest ইত্যাদি।
Rails অ্যাপ্লিকেশনে Permission Management সাধারণত Role-based Access Control (RBAC) এর মাধ্যমে করা হয়। এর মধ্যে একটি রোল নির্ধারণ করা হয়, এবং রোলের ভিত্তিতে অনুমতি দেওয়া হয়।
Role-based Authorization (RBAC) কিভাবে কাজ করে?
RBAC বা Role-based Access Control হল একটি সিস্টেম যেখানে ব্যবহারকারীরা নির্দিষ্ট রোলের ভিত্তিতে নির্ধারিত অনুমতি পায়। একটি রোলের অধীনে একাধিক ব্যবহারকারী থাকতে পারে, এবং রোলের ভিত্তিতে তাদের অ্যাক্সেস দেওয়া হয়।
উদাহরণস্বরূপ:
- Admin রোলের ব্যবহারকারীরা সমস্ত রিসোর্সে অ্যাক্সেস পায়।
- Editor রোলের ব্যবহারকারীরা কেবলমাত্র তাদের নিজস্ব রিসোর্স আপডেট করতে পারে।
- Guest রোলের ব্যবহারকারীরা শুধুমাত্র পাবলিক রিসোর্স দেখতে পাবে।
Rails-এ Role এবং Permission Management কিভাবে তৈরি করবেন?
- Role মডেল তৈরি করা:
rails generate model Role name:string
rails db:migrate
- Role-assignment সম্পর্ক তৈরি করা:
# user.rb
class User < ApplicationRecord
has_many :roles
has_and_belongs_to_many :permissions
end
# role.rb
class Role < ApplicationRecord
has_and_belongs_to_many :users
end
# permission.rb
class Permission < ApplicationRecord
has_and_belongs_to_many :users
end
এখানে, আমরা User, Role, এবং Permission মডেল তৈরি করেছি, যা ব্যবহারকারীদের রোল এবং অনুমতি সম্পর্কিত তথ্য সংরক্ষণ করবে।
- Authorization এবং Permission নিয়ন্ত্রণ:
if current_user.has_role?(:admin)
# Admin actions
end
এখানে, has_role? মেথড ব্যবহার করে আমরা ব্যবহারকারীর রোল চেক করছি এবং অনুমতি অনুযায়ী অ্যাকশন নিয়ন্ত্রণ করছি।
সারমর্ম
Authorization এবং Permission Management হল Rails অ্যাপ্লিকেশনে ব্যবহারকারীদের অনুমতি এবং অ্যাক্সেস নিয়ন্ত্রণ করার প্রক্রিয়া। এটি নিশ্চিত করে যে ব্যবহারকারীরা কেবল তাদের নির্দিষ্ট কার্যাবলী বা রিসোর্সের উপরই অ্যাক্সেস পায়। Pundit এবং CanCanCan হল জনপ্রিয় গেম যা Authorization পরিচালনার জন্য ব্যবহৃত হয়। এছাড়া Role-based Access Control (RBAC) ব্যবস্থার মাধ্যমে Permission Management করা হয়, যেখানে ব্যবহারকারীদের রোলের ভিত্তিতে তাদের অনুমতি নির্ধারণ করা হয়।
Read more