Authentication এবং Authorization Rails এ

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

258

Ruby on Rails-এ Authentication এবং Authorization দুটি গুরুত্বপূর্ণ ধারণা, যা নিরাপত্তা এবং অ্যাপ্লিকেশনের ইউজার ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। Authentication মূলত ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া, এবং Authorization ব্যবহারকারীর প্রাপ্ত অনুমতিগুলি নিয়ন্ত্রণ করার প্রক্রিয়া।


Authentication: ব্যবহারকারীর পরিচয় যাচাই

Authentication ব্যবহারকারীর পরিচয় নিশ্চিত করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে, ব্যবহারকারী সঠিকভাবে লগইন করেছে এবং তাদের অ্যাকাউন্টে প্রবেশের অধিকার আছে। Ruby on Rails-এ Authentication করার জন্য সাধারণত Devise গেম ব্যবহার করা হয়, যা একটি জনপ্রিয় এবং পূর্ণাঙ্গ গেম (gem)।

Devise এর ব্যবহার

Devise একটি শক্তিশালী Ruby gem, যা ব্যবহারকারীর লগইন, লগআউট, রেজিস্ট্রেশন, পাসওয়ার্ড রিসেট ইত্যাদি সকল Authentication সম্পর্কিত কার্যাবলী সহজেই পরিচালনা করতে সাহায্য করে।

Devise ইনস্টলেশন

১. প্রথমে Gemfiledevise গেম যোগ করুন:

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 ইনস্টলেশন

১. প্রথমে Gemfilepundit গেম যোগ করুন:

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 ইনস্টলেশন

১. প্রথমে Gemfilecancancan গেম যোগ করুন:

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 এ এই ব্যবস্থাগুলি সহজভাবে ইমপ্লিমেন্ট করা যায় এবং আপনার অ্যাপ্লিকেশনের নিরাপত্তা বাড়াতে সাহায্য করে।

Content added By

Devise একটি জনপ্রিয় Ruby on Rails জেম (Gem) যা ইউজার অথেন্টিকেশন ব্যবস্থাপনা সহজ করে তোলে। এটি ইউজার রেজিস্ট্রেশন, লগইন, লগআউট, পাসওয়ার্ড রিসেট, ইমেইল ভেরিফিকেশন, এবং আরও অনেক গুরুত্বপূর্ণ অথেন্টিকেশন সম্পর্কিত ফিচার সরবরাহ করে। Devise-এ তৈরি করা ইউজারের জন্য সুরক্ষিত অথেন্টিকেশন ফিচারগুলোর মধ্যে ফিল্ড ভ্যালিডেশন এবং মডেল কলব্যাকস অন্তর্ভুক্ত থাকে, যা ডেভেলপারের জন্য প্রক্রিয়া সহজ করে তোলে।


Devise Gem ইন্সটলেশন এবং কনফিগারেশন

Devise ব্যবহারের জন্য প্রথমে আপনাকে জেমটি ইনস্টল করতে হবে এবং তার পর প্রয়োজনীয় কনফিগারেশন করতে হবে।

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

প্রথমে, Gemfiledevise যোগ করুন:

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 ব্যবহার করে ইউজার অথেন্টিকেশন ব্যবস্থাকে খুব সহজেই নিরাপদ এবং কার্যকর করা যায়।

Content added By

Ruby on Rails-এ একটি User Registration এবং Login System তৈরি করা একটি সাধারণ কিন্তু গুরুত্বপূর্ণ কাজ, যা অধিকাংশ ওয়েব অ্যাপ্লিকেশনেই প্রয়োজন হয়। এই টিউটোরিয়ালে আমরা একটি সিম্পল ব্যবহারকারী নিবন্ধন (registration) এবং লগইন (login) সিস্টেম তৈরি করব। এর জন্য Devise gem ব্যবহারের মাধ্যমে সহজেই একটি শক্তিশালী অথেন্টিকেশন সিস্টেম তৈরি করা যাবে।


1. Devise Gem ইনস্টলেশন

Devise একটি জনপ্রিয় Ruby gem, যা রুবি অন রেইলস অ্যাপ্লিকেশনের জন্য এক্সটেনসিভ অথেন্টিকেশন সিস্টেম প্রদান করে। এটি লগইন, রেজিস্ট্রেশন, ফগোট পাসওয়ার্ড, এবং অন্যান্য অথেন্টিকেশন কার্যক্রম সহজভাবে পরিচালনা করতে সহায়তা করে।

১. Devise Gem ইনস্টল করা

প্রথমে GemfileDevise 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 এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে দ্রুত অথেন্টিকেশন এবং অথোরাইজেশন সিস্টেম সেটআপ করতে পারবেন।

Content added By

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

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 ব্যবহারের উদাহরণ:

  1. Gem ইনস্টলেশন:
gem 'pundit'
  1. Bundle ইনস্টল করুন:
bundle install
  1. Policy তৈরি করা:
rails generate pundit:policy post
  1. Policy ক্লাস:
class PostPolicy < ApplicationPolicy
  def show?
    user.admin? || record.user == user
  end

  def update?
    user.admin? || record.user == user
  end
end

এখানে, show? এবং update? মেথড দুটি ব্যবহারকারীর অনুমতি যাচাই করে যে তারা পোস্টটি দেখবে বা আপডেট করবে কিনা।

  1. কন্ট্রোলারে পন্ডিত ব্যবহার:
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
  1. ভিউ (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 ব্যবহারের উদাহরণ:

  1. Gem ইনস্টলেশন:
gem 'cancancan'
  1. Bundle ইনস্টল করুন:
bundle install
  1. Ability ক্লাস তৈরি করুন:
rails generate cancan:ability
  1. 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? মেথডটি চেক করে যে ব্যবহারকারী অ্যাডমিন কিনা, এবং সেই অনুযায়ী সমস্ত রিসোর্সে অ্যাক্সেস দেওয়া হয়।

  1. কন্ট্রোলারে 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
  1. ভিউতে অনুমতি যাচাই:
<% 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 কিভাবে তৈরি করবেন?

  1. Role মডেল তৈরি করা:
rails generate model Role name:string
rails db:migrate
  1. 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 মডেল তৈরি করেছি, যা ব্যবহারকারীদের রোল এবং অনুমতি সম্পর্কিত তথ্য সংরক্ষণ করবে।

  1. 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 করা হয়, যেখানে ব্যবহারকারীদের রোলের ভিত্তিতে তাদের অনুমতি নির্ধারণ করা হয়।

Content added By
Promotion

Are you sure to start over?

Loading...