Ruby on Rails-এ Authentication এবং Authorization দুটি গুরুত্বপূর্ণ ধারণা, যা নিরাপত্তা এবং অ্যাপ্লিকেশনের ইউজার ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। Authentication মূলত ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া, এবং Authorization ব্যবহারকারীর প্রাপ্ত অনুমতিগুলি নিয়ন্ত্রণ করার প্রক্রিয়া।
Authentication: ব্যবহারকারীর পরিচয় যাচাই
Authentication ব্যবহারকারীর পরিচয় নিশ্চিত করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে, ব্যবহারকারী সঠিকভাবে লগইন করেছে এবং তাদের অ্যাকাউন্টে প্রবেশের অধিকার আছে। Ruby on Rails-এ Authentication করার জন্য সাধারণত Devise গেম ব্যবহার করা হয়, যা একটি জনপ্রিয় এবং পূর্ণাঙ্গ গেম (gem)।
Devise এর ব্যবহার
Devise একটি শক্তিশালী Ruby gem, যা ব্যবহারকারীর লগইন, লগআউট, রেজিস্ট্রেশন, পাসওয়ার্ড রিসেট ইত্যাদি সকল Authentication সম্পর্কিত কার্যাবলী সহজেই পরিচালনা করতে সাহায্য করে।
Devise ইনস্টলেশন
১. প্রথমে Gemfile এ devise গেম যোগ করুন:
gem 'devise'
২. তারপর কমান্ড লাইনে bundle install রান করুন:
bundle install
৩. devise ইনস্টল করার পর, মাইগ্রেশন তৈরি করুন:
rails generate devise:install
৪. মাইগ্রেশন ফাইল তৈরি করে প্রয়োজনীয় টেবিল (যেমন users) তৈরি করুন:
rails generate devise User
rails db:migrate
৫. User মডেলে Devise এর মডেল কনফিগারেশন যোগ করুন:
class User < ApplicationRecord
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable
end
Devise ব্যবহার করে লগইন এবং রেজিস্ট্রেশন ফর্ম তৈরি করা
devise স্বয়ংক্রিয়ভাবে লগইন, রেজিস্ট্রেশন এবং পাসওয়ার্ড রিসেট ফর্মগুলো তৈরি করে দেয়। তবে, আপনি যদি কাস্টম ফর্ম তৈরি করতে চান, তবে নিচের মতো করতে পারেন।
# views/devise/sessions/new.html.erb
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, autofocus: true %>
<%= f.label :password %>
<%= f.password_field :password, autocomplete: "off" %>
<%= f.submit "Log in" %>
<% end %>
এখানে, form_for ব্যবহার করে আপনি একটি কাস্টম লগইন ফর্ম তৈরি করতে পারেন।
Devise কনফিগারেশন
config/initializers/devise.rb ফাইলে Devise এর কনফিগারেশন পরিবর্তন করা যায়। এখানে আপনি পাসওয়ার্ডের নীতিমালা, লগইন সময়ের সীমা, ইমেইল যাচাইয়ের সেটিংস ইত্যাদি কনফিগার করতে পারেন।
Authorization: ব্যবহারকারীর অনুমতি নিয়ন্ত্রণ
Authorization নিশ্চিত করে যে, একটি ব্যবহারকারী নির্দিষ্ট কাজ করতে পারবে কিনা, অর্থাৎ তারা যেসব রিসোর্স অ্যাক্সেস করতে চায়, সেগুলির জন্য তাদের অনুমতি আছে কিনা।
Rails-এ Authorization সাধারণত Pundit অথবা CanCanCan নামক গেম দ্বারা পরিচালিত হয়। এই গেমগুলোর মাধ্যমে আপনি খুব সহজে বিভিন্ন ধরনের রোল এবং পারমিশন কনফিগার করতে পারেন।
Pundit ব্যবহার করে Authorization
Pundit একটি ছোট এবং শক্তিশালী gem, যা আপনার অ্যাপ্লিকেশনে Authorization ব্যবস্থা সহজে তৈরি করতে সাহায্য করে।
Pundit ইনস্টলেশন
১. প্রথমে Gemfile এ pundit গেম যোগ করুন:
gem 'pundit'
২. এরপর কমান্ড লাইনে bundle install রান করুন:
bundle install
৩. Pundit ইনস্টল করতে:
rails generate pundit:install
৪. পলিসি (policy) তৈরি করুন:
rails generate pundit:policy article
এখানে, article হল আপনার মডেল, যা আপনি অনুমতি সেট করতে চান।
Pundit Policy
একটি Policy ক্লাস ব্যবহারকারীকে নির্দিষ্ট অ্যাকশন (যেমন, দেখার, সম্পাদনা, বা মুছে ফেলা) করার অনুমতি দেয় কিনা তা যাচাই করবে।
# app/policies/article_policy.rb
class ArticlePolicy < ApplicationPolicy
def update?
user.admin? || record.user == user
end
def destroy?
user.admin?
end
end
এখানে, update? এবং destroy? মেথডে যাচাই করা হচ্ছে যে, ব্যবহারকারী এ্যাকশনটি সম্পাদন করার জন্য উপযুক্ত কিনা।
Authorization চেক করা
কোথাও আপনার Authorization চেক করতে:
class ArticlesController < ApplicationController
def update
@article = Article.find(params[:id])
authorize @article # Pundit এর authorize মেথড ব্যবহার করা হচ্ছে
@article.update(article_params)
end
end
এখানে, authorize @article নিশ্চিত করবে যে, ব্যবহারকারী এই @article আপডেট করার অনুমতি পাবে কিনা।
CanCanCan ব্যবহার করে Authorization
CanCanCan আরেকটি জনপ্রিয় gem, যা একটি সহজ API প্রদান করে রোল ভিত্তিক অনুমতি (role-based authorization) সেটআপ করার জন্য।
CanCanCan ইনস্টলেশন
১. প্রথমে Gemfile এ cancancan গেম যোগ করুন:
gem 'cancancan'
২. তারপর bundle install রান করুন:
bundle install
৩. Ability ক্লাস তৈরি করুন:
rails generate cancan:ability
৪. Ability ক্লাসে অনুমতি নির্ধারণ করুন:
# app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # Guest user
if user.admin?
can :manage, :all # Admin can manage everything
else
can :read, Article # Regular user can read articles
end
end
end
এখানে, admin? চেক করে অ্যাডমিনদের সব কিছু ম্যানেজ করার অনুমতি দেওয়া হচ্ছে এবং সাধারণ ব্যবহারকারীদের Article পড়ার অনুমতি দেওয়া হচ্ছে।
CanCanCan Authorization চেক করা
কন্ট্রোলার অ্যাকশনে authorize! মেথড ব্যবহার করে Authorization চেক করা হয়।
class ArticlesController < ApplicationController
def show
@article = Article.find(params[:id])
authorize! :read, @article # Check if user can read this article
end
end
এখানে, authorize! :read, @article চেক করবে যে, ব্যবহারকারী এই @article পড়ার অনুমতি পায় কিনা।
সারমর্ম
Authentication এবং Authorization Rails-এ নিরাপত্তা এবং অনুমতি ব্যবস্থার জন্য গুরুত্বপূর্ণ কনসেপ্ট। Authentication নিশ্চিত করে যে, ব্যবহারকারী সঠিকভাবে লগইন করেছে, এবং Authorization নিশ্চিত করে যে, সেই ব্যবহারকারী নির্দিষ্ট অ্যাকশন করতে পারবে কিনা। Devise সাধারণত Authentication এর জন্য ব্যবহৃত হয়, এবং Pundit বা CanCanCan Authorization এর জন্য ব্যবহৃত হয়। Rails এ এই ব্যবস্থাগুলি সহজভাবে ইমপ্লিমেন্ট করা যায় এবং আপনার অ্যাপ্লিকেশনের নিরাপত্তা বাড়াতে সাহায্য করে।
Devise একটি জনপ্রিয় Ruby on Rails জেম (Gem) যা ইউজার অথেন্টিকেশন ব্যবস্থাপনা সহজ করে তোলে। এটি ইউজার রেজিস্ট্রেশন, লগইন, লগআউট, পাসওয়ার্ড রিসেট, ইমেইল ভেরিফিকেশন, এবং আরও অনেক গুরুত্বপূর্ণ অথেন্টিকেশন সম্পর্কিত ফিচার সরবরাহ করে। Devise-এ তৈরি করা ইউজারের জন্য সুরক্ষিত অথেন্টিকেশন ফিচারগুলোর মধ্যে ফিল্ড ভ্যালিডেশন এবং মডেল কলব্যাকস অন্তর্ভুক্ত থাকে, যা ডেভেলপারের জন্য প্রক্রিয়া সহজ করে তোলে।
Devise Gem ইন্সটলেশন এবং কনফিগারেশন
Devise ব্যবহারের জন্য প্রথমে আপনাকে জেমটি ইনস্টল করতে হবে এবং তার পর প্রয়োজনীয় কনফিগারেশন করতে হবে।
1. Devise Gem ইনস্টল করা
প্রথমে, Gemfile এ devise যোগ করুন:
gem 'devise'
এরপর, টার্মিনালে এই কমান্ডটি চালিয়ে জেমটি ইনস্টল করুন:
bundle install
2. Devise কনফিগারেশন
Devise কনফিগারেশন ফাইল তৈরি করতে এই কমান্ডটি চালান:
rails generate devise:install
এই কমান্ডটি ডিভাইজের কনফিগারেশন ফাইল config/initializers/devise.rb তৈরি করবে এবং ব্যবহারকারীদের জন্য কিছু নির্দেশনা দিবে, যেমন ইউজারের ইমেইল ভেরিফিকেশন সেটিংস এবং অ্যাডমিন রুট তৈরি।
3. ইউজার মডেল তৈরি
Devise ইউজারের জন্য একটি মডেল তৈরি করতে devise জেনারেটর ব্যবহার করুন। সাধারণত, আপনি একটি User মডেল তৈরি করবেন:
rails generate devise User
এই কমান্ডটি User মডেল তৈরি করবে এবং সেখানে Devise এর প্রয়োজনীয় ফিচারগুলো যোগ করবে, যেমন email, encrypted_password, reset_password_token, ইত্যাদি। এটি ডাটাবেস মাইগ্রেশনও তৈরি করবে।
4. মাইগ্রেশন চালানো
মাইগ্রেশন ফাইলটি ডাটাবেসে প্রয়োগ করতে এই কমান্ডটি চালান:
rails db:migrate
এটি users টেবিল তৈরি করবে যেখানে Devise এর জন্য প্রয়োজনীয় ফিল্ডগুলো থাকবে।
Devise-এ Authentication ব্যবহার
Devise ইন্সটল করার পর আপনি খুব সহজেই ইউজার অথেন্টিকেশন ফিচারগুলো ব্যবহার করতে পারবেন। Devise ইউজারের জন্য রেজিস্ট্রেশন, লগইন, লগআউট ইত্যাদি ফিচার প্রদান করে।
1. রেজিস্ট্রেশন ফর্ম তৈরি
Devise আপনাকে রেজিস্ট্রেশন, লগইন, এবং পাসওয়ার্ড রিসেটের জন্য অটোমেটিক্যালি ফর্ম তৈরি করে দেয়, তবে আপনি চাইলে কাস্টমাইজও করতে পারেন।
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, autofocus: true %>
<%= f.label :password %>
<%= f.password_field :password, autocomplete: "off" %>
<%= f.submit "Sign up" %>
<% end %>
এটি একটি সাধারণ রেজিস্ট্রেশন ফর্ম যা ইউজারের ইমেইল এবং পাসওয়ার্ড ইনপুট নেয়।
2. লগইন ফর্ম
Devise ইউজারের লগইন ফর্মও স্বয়ংক্রিয়ভাবে তৈরি করে দেয়। তবে আপনি চাইলে এটি কাস্টমাইজ করতে পারেন।
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, autofocus: true %>
<%= f.label :password %>
<%= f.password_field :password, autocomplete: "off" %>
<%= f.submit "Log in" %>
<% end %>
3. লগআউট ফিচার
লগআউট করার জন্য Devise একটি রুট প্রদান করে, যা ইউজারকে লগআউট করতে সাহায্য করে।
<%= link_to "Log out", destroy_user_session_path, method: :delete %>
এটি লগআউট করার জন্য একটি লিঙ্ক তৈরি করবে।
Devise-এর অতিরিক্ত ফিচার
Devise অনেক ফিচার সরবরাহ করে যা আপনাকে সুরক্ষিত অথেন্টিকেশন প্রক্রিয়া তৈরি করতে সহায়তা করবে। নিচে কিছু জনপ্রিয় ফিচার উল্লেখ করা হলো:
1. Confirmable (ইমেইল ভেরিফিকেশন)
Devise এর confirmable ফিচার ব্যবহার করে ইউজারের ইমেইল ভেরিফিকেশন করা যায়। এটি ব্যবহারকারীকে রেজিস্ট্রেশন পরবর্তী একটি ইমেইল পাঠায় যাতে ইউজারকে তার ইমেইল ঠিকানা যাচাই করতে বলা হয়।
Devise কনফিগারেশন ফাইলে :confirmable অ্যাট্রিবিউট যোগ করুন:
class User < ApplicationRecord
devise :confirmable, :registerable, :database_authenticatable, :recoverable, :rememberable
end
এখন, একটি ইমেইল ভেরিফিকেশন লিংক পাঠানো হবে, যাতে ইউজার তার ইমেইল ঠিকানা কনফার্ম করতে পারবে।
2. Recoverable (পাসওয়ার্ড রিসেট)
Devise এর recoverable ফিচারের মাধ্যমে ইউজার পাসওয়ার্ড ভুলে গেলে সেটি রিসেট করতে পারে। এটি পাসওয়ার্ড রিসেট লিংক ইমেইলে পাঠায়।
class User < ApplicationRecord
devise :recoverable, :registerable, :database_authenticatable
end
এখন, ব্যবহারকারী পাসওয়ার্ড ভুলে গেলে সে একটি রিসেট লিংক ইমেইলে পাবে।
3. Lockable (অ্যাকাউন্ট লক)
Devise এর lockable ফিচার ব্যবহার করে ইউজারের অ্যাকাউন্ট লক করা যায় নির্দিষ্ট সংখ্যক ভুল লগইন চেষ্টার পর।
class User < ApplicationRecord
devise :lockable, :registerable, :database_authenticatable
end
এটি ব্যবহারকারীকে নির্দিষ্ট সংখ্যক ভুল পাসওয়ার্ড ইনপুটের পর অ্যাকাউন্ট লক করে দেবে।
রাউট কনফিগারেশন
Devise আপনার রাউট কনফিগারেশন স্বয়ংক্রিয়ভাবে তৈরি করে, তবে আপনি চাইলে কাস্টমাইজও করতে পারেন। সাধারণভাবে, config/routes.rb ফাইলে নিচের কোডটি থাকে:
Rails.application.routes.draw do
devise_for :users
# অন্যান্য রাউট
end
এটি Devise এর সমস্ত রাউট তৈরি করে, যেমন /users/sign_in, /users/sign_up, /users/password/new ইত্যাদি।
সারমর্ম
Devise একটি শক্তিশালী এবং জনপ্রিয় Ruby on Rails জেম, যা সহজেই সুরক্ষিত ইউজার অথেন্টিকেশন সিস্টেম তৈরি করতে সহায়তা করে। এটি ইউজার রেজিস্ট্রেশন, লগইন, লগআউট, পাসওয়ার্ড রিসেট, ইমেইল ভেরিফিকেশন, এবং অ্যাকাউন্ট লক করার মতো ফিচার সরবরাহ করে। Devise ব্যবহার করে ইউজার অথেন্টিকেশন ব্যবস্থাকে খুব সহজেই নিরাপদ এবং কার্যকর করা যায়।
Ruby on Rails-এ একটি User Registration এবং Login System তৈরি করা একটি সাধারণ কিন্তু গুরুত্বপূর্ণ কাজ, যা অধিকাংশ ওয়েব অ্যাপ্লিকেশনেই প্রয়োজন হয়। এই টিউটোরিয়ালে আমরা একটি সিম্পল ব্যবহারকারী নিবন্ধন (registration) এবং লগইন (login) সিস্টেম তৈরি করব। এর জন্য Devise gem ব্যবহারের মাধ্যমে সহজেই একটি শক্তিশালী অথেন্টিকেশন সিস্টেম তৈরি করা যাবে।
1. Devise Gem ইনস্টলেশন
Devise একটি জনপ্রিয় Ruby gem, যা রুবি অন রেইলস অ্যাপ্লিকেশনের জন্য এক্সটেনসিভ অথেন্টিকেশন সিস্টেম প্রদান করে। এটি লগইন, রেজিস্ট্রেশন, ফগোট পাসওয়ার্ড, এবং অন্যান্য অথেন্টিকেশন কার্যক্রম সহজভাবে পরিচালনা করতে সহায়তা করে।
১. Devise Gem ইনস্টল করা
প্রথমে Gemfile এ Devise gem যোগ করুন:
gem 'devise'
এরপর, নিচের কমান্ডটি চালিয়ে gem ইনস্টল করুন:
bundle install
২. Devise কনফিগারেশন
Devise ইনস্টল করার পর, কনফিগারেশন ফাইল সেটআপ করতে নিম্নলিখিত কমান্ডটি চালান:
rails generate devise:install
এটি Devise এর কনফিগারেশন ফাইল তৈরি করবে এবং কিছু গাইডলাইনও প্রদান করবে যা আপনাকে আপনার অ্যাপ্লিকেশন সেটআপ করতে সহায়তা করবে। নির্দেশাবলী অনুসরণ করতে ভুলবেন না।
2. User মডেল তৈরি করা
এখন, আমরা একটি User মডেল তৈরি করব যা আমাদের ব্যবহারকারীদের জন্য রেজিস্ট্রেশন এবং লগইন সিস্টেমের ভূমিকা পালন করবে।
১. User মডেল তৈরি
Devise ব্যবহার করতে হলে, আমরা একটি User মডেল তৈরি করতে হবে যা Devise দ্বারা প্রোভাইড করা ফিচারসমূহ ইনক্লুড করবে। devise কনফিগারেশন দিয়ে মডেল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
rails generate devise User
এটি User মডেল তৈরি করবে এবং প্রয়োজনীয় ফিল্ডগুলো (যেমন email, encrypted_password ইত্যাদি) সহ ডেটাবেস মাইগ্রেশন ফাইল তৈরি করবে।
২. মাইগ্রেশন চালানো
মাইগ্রেশন ফাইল তৈরি হওয়ার পর, এটি ডেটাবেসে প্রয়োগ করতে নিম্নলিখিত কমান্ডটি চালান:
rails db:migrate
এটি ডেটাবেসের users টেবিল তৈরি করবে, যেখানে Devise এর প্রিভিলেজগুলোর জন্য প্রয়োজনীয় ফিল্ড থাকবে (যেমন email, encrypted_password, reset_password_token, ইত্যাদি)।
3. রেজিস্ট্রেশন এবং লগইন ফর্ম তৈরি করা
১. রেজিস্ট্রেশন ফর্ম (Sign Up)
Devise স্বয়ংক্রিয়ভাবে রেজিস্ট্রেশন এবং লগইন ফর্ম তৈরি করে, তবে যদি আপনি কাস্টম ফর্ম তৈরি করতে চান, তবে নিচের মত করতে পারেন।
app/views/devise/registrations/new.html.erb ফাইলে রেজিস্ট্রেশন ফর্ম থাকবে:
<h2>Sign Up</h2>
<%= form_for(@user, as: :user, url: user_registration_path) do |f| %>
<div>
<%= f.label :email %>
<%= f.email_field :email, autofocus: true %>
</div>
<div>
<%= f.label :password %>
<%= f.password_field :password, autocomplete: "off" %>
</div>
<div>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation %>
</div>
<div>
<%= f.submit "Sign Up" %>
</div>
<% end %>
২. লগইন ফর্ম (Login)
লগইন ফর্মের জন্য app/views/devise/sessions/new.html.erb ফাইলটি কাস্টমাইজ করা যেতে পারে:
<h2>Login</h2>
<%= form_for(:user, as: :user, url: user_session_path) do |f| %>
<div>
<%= f.label :email %>
<%= f.email_field :email, autofocus: true %>
</div>
<div>
<%= f.label :password %>
<%= f.password_field :password, autocomplete: "off" %>
</div>
<div>
<%= f.submit "Login" %>
</div>
<% end %>
4. Routes কনফিগারেশন
Devise স্বয়ংক্রিয়ভাবে প্রয়োজনীয় রুট (routes) কনফিগার করে, কিন্তু যদি আপনি কাস্টম রাউট ব্যবহার করতে চান তবে config/routes.rb ফাইলে সেটআপ করতে পারেন:
Rails.application.routes.draw do
devise_for :users
root to: 'home#index'
end
এটি Devise এর জন্য সমস্ত রাউট তৈরি করবে, যেমন:
/users/sign_in(লগইন পেজ)/users/sign_up(রেজিস্ট্রেশন পেজ)/users/sign_out(লগআউট)
5. User Authentication
Devise স্বয়ংক্রিয়ভাবে লগইন, রেজিস্ট্রেশন, লগআউট এবং অন্যান্য অথেন্টিকেশন ফিচারগুলি হ্যান্ডেল করবে। ব্যবহারকারী যদি লগইন না থাকে তবে তারা স্বয়ংক্রিয়ভাবে লগইন পেজে রিডাইরেক্ট হবে।
১. ব্যবহারকারী লগইন এবং লগআউট
Devise স্বয়ংক্রিয়ভাবে sign_in এবং sign_out ফাংশনালিটি প্রদান করে। আপনি যদি লগইন বা লগআউট করতে চান, তাহলে নিচের মত ব্যবহার করতে পারেন:
# লগইন
user = User.find_by(email: "user@example.com")
sign_in(user)
# লগআউট
sign_out(user)
২. ব্যবহারকারীর তথ্য অ্যাক্সেস
লগইন হওয়ার পর, আপনি ব্যবহারকারীর তথ্য অ্যাক্সেস করতে পারেন:
current_user # এটি বর্তমানে লগইন করা ব্যবহারকারীকে ফেরত দেবে।
6. Password Reset
Devise ব্যবহারকারীদের পাসওয়ার্ড রিসেট করার জন্য একটি স্বয়ংক্রিয় পদ্ধতি প্রদান করে। ব্যবহারকারী যদি পাসওয়ার্ড ভুলে যায়, তবে তারা একটি লিঙ্ক পেতে পারে যার মাধ্যমে তারা তাদের পাসওয়ার্ড রিসেট করতে পারবে।
Devise পাসওয়ার্ড রিসেট ফিচারটি সক্রিয় করার জন্য কিছু কনফিগারেশন সেটআপ করতে হয়। config/initializers/devise.rb ফাইলে config.reconfirmable এবং অন্যান্য পাসওয়ার্ড রিসেট কনফিগারেশন পরিবর্তন করতে হবে।
সারমর্ম
Ruby on Rails-এ একটি User Registration এবং Login System তৈরি করতে Devise gem ব্যবহার করা একটি সহজ এবং জনপ্রিয় উপায়। এটি লগইন, রেজিস্ট্রেশন, পাসওয়ার্ড রিসেট, এবং সেশন ম্যানেজমেন্টের মতো গুরুত্বপূর্ণ ফিচারগুলি স্বয়ংক্রিয়ভাবে তৈরি করে। Devise এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে দ্রুত অথেন্টিকেশন এবং অথোরাইজেশন সিস্টেম সেটআপ করতে পারবেন।
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 ব্যবহার করে অ্যাক্সেস কন্ট্রোল কার্যকর করা হয়।
- কন্ট্রোলার এবং ভিউতে পারমিশন চেক করা হয়।
এভাবে, আপনি আপনার অ্যাপ্লিকেশনে বিভিন্ন ব্যবহারকারী রোল অনুযায়ী নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল নিশ্চিত করতে পারেন।
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