Ruby on Rails এ Filters হল একটি শক্তিশালী ফিচার যা কন্ট্রোলারের অ্যাকশনের আগে বা পরে কিছু কাজ করতে সাহায্য করে। এগুলি সাধারণত before_action এবং after_action হিসেবে ব্যবহৃত হয়। Filters সাধারণত অ্যাপ্লিকেশনের নিরাপত্তা বা কার্যকারিতা বাড়াতে ব্যবহৃত হয়, যেমন ইউজারের অথেনটিকেশন যাচাই করা, পারমিশন চেক করা, লগিং করা ইত্যাদি।
এছাড়া, Authentication হল একটি গুরুত্বপূর্ণ ফিচার, যা নিশ্চিত করে যে শুধুমাত্র বৈধ ইউজাররা সিস্টেমে অ্যাক্সেস পাচ্ছে। Rails সাধারণত Authentication এর জন্য কিছু সাধারণ গেম (যেমন Devise) ব্যবহার করে, তবে আপনি নিজের কাস্টম অথেনটিকেশনও তৈরি করতে পারেন।
Filters in Rails
Rails কন্ট্রোলারে ফিল্টার ব্যবহার করে আপনি নির্দিষ্ট অ্যাকশনের আগে বা পরে কিছু কোড কার্যকর করতে পারেন। Filters সাধারণত নিরাপত্তা, পারমিশন চেক বা অন্যান্য রিসোর্স ব্যবস্থাপনা করতে ব্যবহৃত হয়। ফিল্টার দুটি প্রধানভাবে ব্যবহৃত হয়:
- before_action: এটি অ্যাকশনের আগে কিছু কাজ করার জন্য ব্যবহৃত হয়।
- after_action: এটি অ্যাকশনের পরে কিছু কাজ করার জন্য ব্যবহৃত হয়।
১. before_action
before_action ফিল্টারটি ব্যবহার করা হয় কোন অ্যাকশন এক্সিকিউট হওয়ার আগে কিছু কোড চালাতে। সাধারণত এটি অ্যাকশনের আগে ইউজারের অথেনটিকেশন চেক করার জন্য ব্যবহৃত হয়।
উদাহরণ: Authentication Check
class PostsController < ApplicationController
before_action :authenticate_user!, only: [:new, :create, :edit, :update]
def new
# কোড এখানে
end
def create
# কোড এখানে
end
private
def authenticate_user!
if current_user.nil?
redirect_to login_path, alert: "You must be logged in to access this page."
end
end
end
এখানে, before_action :authenticate_user! নিশ্চিত করে যে ইউজার যদি লগইন না থাকে, তবে তাকে লগইন পেজে রিডাইরেক্ট করা হবে। এটি new, create, edit, এবং update অ্যাকশনের আগে কার্যকর হবে।
২. after_action
after_action ফিল্টারটি ব্যবহার করা হয় কোন অ্যাকশন এক্সিকিউট হওয়ার পরে কিছু কোড চালাতে। এটি সাধারণত লগিং বা ট্র্যাকিং করার জন্য ব্যবহৃত হয়।
উদাহরণ: Logging after action
class PostsController < ApplicationController
after_action :log_activity, only: [:create, :update]
def create
# কোড এখানে
end
def update
# কোড এখানে
end
private
def log_activity
logger.info "Post was created or updated."
end
end
এখানে, after_action :log_activity ফিল্টারটি create এবং update অ্যাকশনের পরে log_activity মেথডটি কল করবে, যা পোস্ট তৈরি বা আপডেট করার লগ রাখবে।
৩. around_action
around_action ফিল্টারটি একটি বিশেষ ধরনের ফিল্টার, যা অ্যাকশন শুরু হওয়ার আগে এবং শেষ হওয়ার পরে কোড চালাতে ব্যবহৃত হয়। এটি সাধারণত সময় ট্র্যাকিং বা ট্রানজেকশন ম্যানেজমেন্টে ব্যবহৃত হয়।
উদাহরণ: Timing Execution
class PostsController < ApplicationController
around_action :measure_time, only: [:create]
def create
# কোড এখানে
end
private
def measure_time
start_time = Time.now
yield # অ্যাকশন এক্সিকিউট হবে
end_time = Time.now
logger.info "Action executed in #{end_time - start_time} seconds"
end
end
এখানে, around_action :measure_time ফিল্টারটি create অ্যাকশনের জন্য ব্যবহৃত হয় এবং এটি সেই অ্যাকশনের চলমান সময় মাপবে।
Authentication Handling in Rails
Authentication হল একটি প্রক্রিয়া যা নিশ্চিত করে যে ইউজারটি সঠিকভাবে সিস্টেমে লগইন হয়েছে এবং তার অ্যাক্সেস পারমিশন আছে। Rails-এ Devise একটি জনপ্রিয় গেম যা ইউজার অথেনটিকেশন পরিচালনা করতে সাহায্য করে। তবে, আপনি কাস্টম অথেনটিকেশনও তৈরি করতে পারেন।
১. Devise Gem
Devise হলো একটি শক্তিশালী অথেনটিকেশন গেম যা ইউজার লগইন, সাইনআপ, পাসওয়ার্ড রিসেট, সেশন ম্যানেজমেন্ট ইত্যাদি পরিচালনা করতে সাহায্য করে। Devise ইনস্টল করার জন্য:
gem 'devise'
তারপর, bundle install চালিয়ে Devise ইনস্টল করুন:
bundle install
Devise মডেল তৈরি করতে:
rails generate devise:install
rails generate devise User
rails db:migrate
এখন, আপনি User মডেলে Devise এর সমস্ত অথেনটিকেশন ফিচার পাবেন।
২. Current User এবং Access Control
আপনি কন্ট্রোলারে current_user এবং authenticate_user! মেথড ব্যবহার করে ইউজার অথেনটিকেশন পরিচালনা করতে পারেন।
উদাহরণ: Only authenticated users can access specific actions
class PostsController < ApplicationController
before_action :authenticate_user!, only: [:new, :create, :edit, :update]
def new
# কোড এখানে
end
def create
# কোড এখানে
end
end
এখানে, authenticate_user! নিশ্চিত করে যে ইউজার যদি লগইন না থাকে, তবে সেগুলোর অ্যাকশন অ্যাক্সেস করতে পারবেন না।
৩. Custom Authentication (Without Devise)
আপনি যদি Devise ব্যবহার না করেন এবং নিজস্ব কাস্টম অথেনটিকেশন সিস্টেম তৈরি করতে চান, তাহলে আপনাকে সেশন এবং ইউজার লগইন ম্যানেজ করতে হবে।
class ApplicationController < ActionController::Base
helper_method :current_user
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def authenticate_user!
redirect_to login_path, alert: "You must be logged in" unless current_user
end
end
এখানে, current_user মেথডটি সেশন থেকে লগইন করা ইউজারকে রিটার্ন করবে এবং authenticate_user! ফিল্টারটি নিশ্চিত করবে যে ইউজার যদি লগইন না থাকে, তবে তাকে লগইন পেজে রিডাইরেক্ট করবে।
সারমর্ম
Filters (before_action, after_action, around_action) Rails কন্ট্রোলারের মধ্যে নির্দিষ্ট কাজ (যেমন ইউজার অথেনটিকেশন, পারমিশন চেক) করার জন্য ব্যবহৃত হয়। before_action ফিল্টার অ্যাকশনের আগে কিছু কাজ করে, after_action অ্যাকশনের পরে এবং around_action অ্যাকশনের আগে এবং পরে কোড চালাতে ব্যবহৃত হয়।
Authentication ব্যবস্থায় Devise গেম ব্যবহার করা যায়, যা ইউজারের লগইন, সাইনআপ, পাসওয়ার্ড রিসেট ইত্যাদি কার্যক্রম সহজ করে। আপনি যদি কাস্টম অথেনটিকেশন তৈরি করতে চান, তবে সেশন ম্যানেজমেন্ট এবং ইউজারের লগইন স্টেটাস ট্র্যাক করার জন্য কাস্টম কোড লিখতে পারেন।
Rails এ Filters এবং Authentication ব্যবস্থার মাধ্যমে আপনি একটি নিরাপদ এবং কার্যকরী অ্যাপ্লিকেশন তৈরি করতে পারবেন।
Read more