TurboGears এবং Role-Based Access Control (RBAC)
TurboGears একটি পাইটন (Python) ভিত্তিক ওয়েব ফ্রেমওয়ার্ক যা দ্রুত এবং শক্তিশালী ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়ক। TurboGears এর মাধ্যমে আপনি মডেল, ভিউ এবং কন্ট্রোলার (MVC) আর্কিটেকচার ব্যবহার করে অ্যাপ্লিকেশন তৈরি করতে পারেন।
Role-Based Access Control (RBAC) হল একটি নিরাপত্তা ব্যবস্থা যেখানে ব্যবহারকারীদের এক বা একাধিক roles (ভূমিকা) দেওয়া হয় এবং সেই ভূমিকার ভিত্তিতে তাদের অ্যাপ্লিকেশন বা সিস্টেমের বিভিন্ন অংশে অ্যাক্সেস দেওয়া হয়। RBAC ব্যবহার করে আপনি নিয়ন্ত্রণ করতে পারেন কোন ব্যবহারকারী কী ডেটা বা ফিচার অ্যাক্সেস করতে পারে।
TurboGears-এ RBAC ইমপ্লিমেন্ট করা একটি সাধারণ প্রক্রিয়া, যেখানে আপনি role এবং permissions সেট আপ করে ব্যবহারকারীদের অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন।
TurboGears এ RBAC ইমপ্লিমেন্টেশন
TurboGears এ RBAC ইমপ্লিমেন্ট করতে Identity এবং Authorization মডিউল ব্যবহার করা হয়। TurboGears এর মধ্যে Identity ম্যানেজমেন্টের জন্য TurboGears.Identity প্যাকেজ ব্যবহৃত হয়, যা ব্যবহারকারীদের ভূমিকা এবং অনুমতি (permissions) পরিচালনা করতে সহায়ক।
১. TurboGears Setup এবং Dependencies ইনস্টলেশন
প্রথমে TurboGears ইনস্টল করতে হবে এবং প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করুন।
pip install TurboGears2
pip install tgext.admin
pip install tgext.security
এটি TurboGears এবং প্রয়োজনীয় সিকিউরিটি প্যাকেজ ইনস্টল করবে।
২. RBAC মডেল তৈরি করা
TurboGears এ RBAC ইমপ্লিমেন্ট করতে আপনাকে role এবং permission মডেল তৈরি করতে হবে। এর মাধ্যমে আপনি ব্যবহারকারীকে নির্দিষ্ট ভূমিকা এবং অনুমতি প্রদান করতে পারবেন।
from tgext.security import User, Role, Permission
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
# Role model
class Role(Base):
__tablename__ = 'roles'
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True)
permissions = relationship('Permission', secondary='role_permissions')
# Permission model
class Permission(Base):
__tablename__ = 'permissions'
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True)
# User model
class User(Base, UserMixin):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(100), unique=True)
password = Column(String(100))
roles = relationship('Role', secondary='user_roles')
# Associative table for user roles
class UserRoles(Base):
__tablename__ = 'user_roles'
user_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
role_id = Column(Integer, ForeignKey('roles.id'), primary_key=True)
এখানে, User, Role, এবং Permission মডেল তৈরি করা হয়েছে, যেখানে Role এবং Permission এর মধ্যে সম্পর্ক তৈরি করা হয়েছে।
৩. Role এবং Permission সেট করা
এখন, আমাদের সিস্টেমে কিছু role এবং permission তৈরি করতে হবে। উদাহরণস্বরূপ, admin, editor, viewer roles এবং তাদের সাথে সম্পর্কিত permissions তৈরি করা যাবে।
admin_role = Role(name="admin")
editor_role = Role(name="editor")
viewer_role = Role(name="viewer")
admin_permission = Permission(name="admin:access")
editor_permission = Permission(name="editor:access")
viewer_permission = Permission(name="viewer:access")
# Assign permissions to roles
admin_role.permissions = [admin_permission, editor_permission, viewer_permission]
editor_role.permissions = [editor_permission, viewer_permission]
viewer_role.permissions = [viewer_permission]
এখানে, admin role সমস্ত permissions পেয়েছে, editor role কিছু permissions পেয়েছে এবং viewer শুধুমাত্র view permissions পেয়েছে।
৪. User-Role সম্পর্ক সেট করা
ব্যবহারকারীদের বিভিন্ন role অ্যাসাইন করতে হবে। উদাহরণস্বরূপ, একটি admin ব্যবহারকারী তৈরি করা:
admin_user = User(username="admin", password="password")
admin_user.roles = [admin_role]
এখানে, admin_user কে admin role দেওয়া হয়েছে, যার ফলে সে সমস্ত permissions অ্যাক্সেস করতে পারবে।
৫. Access Control Check
কোনো একটি ব্যবহারকারীর অ্যাক্সেস যাচাই করতে, আপনি check_permissions() ফাংশন ব্যবহার করতে পারেন যা নিশ্চিত করবে যে ব্যবহারকারী নির্দিষ্ট permission রয়েছে কিনা।
from tgext.security import check_permissions
def check_user_permission(user, permission):
if check_permissions(permission):
return True
return False
এখানে, check_permissions() ফাংশন ব্যবহারকারীটির জন্য নির্দিষ্ট permission চেক করবে। এটি True রিটার্ন করবে যদি ব্যবহারকারীর কাছে প্রয়োজনীয় permission থাকে, অন্যথায় False।
৬. RBAC এর মাধ্যমে ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ
RBAC সিস্টেম ব্যবহার করে আপনি অ্যাপ্লিকেশন এর নির্দিষ্ট অংশে অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। উদাহরণস্বরূপ, একটি admin পৃষ্ঠায় শুধুমাত্র admin রোলের ব্যবহারকারী অ্যাক্সেস পাবে।
from tgext.security import requires_permission
@requires_permission('admin:access')
def admin_dashboard():
return "Welcome to the Admin Dashboard"
এখানে, @requires_permission('admin:access') ডেকোরেটর ব্যবহার করে admin পৃষ্ঠার অ্যাক্সেস নিয়ন্ত্রণ করা হয়েছে। এই ফাংশনটি শুধুমাত্র admin:access permission থাকা ব্যবহারকারীকে এক্সেস দেবে।
সারাংশ
Role-Based Access Control (RBAC) একটি গুরুত্বপূর্ণ নিরাপত্তা ব্যবস্থা যা TurboGears অ্যাপ্লিকেশন তৈরির জন্য অত্যন্ত সহায়ক। এতে আপনি ব্যবহারকারীদের নির্দিষ্ট role (ভূমিকা) প্রদান করতে পারেন এবং সেই ভূমিকার ভিত্তিতে তাদের অ্যাপ্লিকেশন এর বিভিন্ন অংশে অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। TurboGears-এ RBAC ইমপ্লিমেন্ট করতে User, Role, এবং Permission মডেল তৈরি করে এবং check_permissions(), @requires_permission() ডেকোরেটর ব্যবহার করা হয়। এর মাধ্যমে আপনি সহজেই আপনার ওয়েব অ্যাপ্লিকেশনে শক্তিশালী অ্যাক্সেস কন্ট্রোল সিস্টেম তৈরি করতে পারেন।
Read more