CherryPy তে Role-based Authorization (রোল-ভিত্তিক অনুমোদন) এবং Access Control (অ্যাক্সেস কন্ট্রোল) বাস্তবায়ন করা খুবই গুরুত্বপূর্ণ, বিশেষত ওয়েব অ্যাপ্লিকেশনে ব্যবহারকারীদের বিভিন্ন স্তরের অ্যাক্সেস প্রদান করতে। এই ধারণা অনুসরণ করে, ব্যবহারকারীদের বিভিন্ন রোলের ভিত্তিতে অ্যাক্সেস কন্ট্রোল সেট করা হয়, যেমন অ্যাডমিন, ইউজার, গেস্ট ইত্যাদি। CherryPy এ সহজেই এই ধরনের অনুমোদন ব্যবস্থা তৈরি করা সম্ভব।
Role-based Authorization (রোল-ভিত্তিক অনুমোদন)
Role-based Authorization একটি নিরাপত্তা কৌশল, যেখানে ব্যবহারকারীদের নির্দিষ্ট রোল বা পদের ভিত্তিতে তাদের অ্যাপ্লিকেশনে অ্যাক্সেস দেওয়া হয়। সাধারণত, এটি authentication (ব্যবহারকারীর পরিচয় যাচাই) এবং authorization (অ্যাক্সেস অনুমোদন) এর মধ্যে ব্যবধান তৈরি করে।
CherryPy তে Role-based Authorization বাস্তবায়ন
CherryPy তে রোল-ভিত্তিক অ্যাক্সেস কন্ট্রোল বাস্তবায়ন করতে cherrypy.tools এবং cherrypy.request টুলস ব্যবহার করা যায়।
উদাহরণ: রোল-ভিত্তিক অনুমোদন
- ব্যবহারকারী মডেল তৈরি করা:
import cherrypy
class User:
def __init__(self, username, password, role):
self.username = username
self.password = password
self.role = role # 'admin', 'user', 'guest'
- Authentication এবং Authorization টুলস:
class AuthApp:
def __init__(self):
# কিছু ডেমো ব্যবহারকারী
self.users = [
User("admin", "adminpass", "admin"),
User("user", "userpass", "user"),
User("guest", "guestpass", "guest"),
]
def check_credentials(self, username, password):
for user in self.users:
if user.username == username and user.password == password:
return user
return None
def check_role(self, user, required_role):
if user.role == required_role:
return True
return False
@cherrypy.expose
def index(self):
return '''<html>
<body>
<h2>লগইন ফর্ম</h2>
<form action="/login" method="post">
<label for="username">ইউজারনেম:</label><br>
<input type="text" name="username" required><br><br>
<label for="password">পাসওয়ার্ড:</label><br>
<input type="password" name="password" required><br><br>
<input type="submit" value="লগইন">
</form>
</body>
</html>'''
@cherrypy.expose
def login(self, username, password):
user = self.check_credentials(username, password)
if user:
cherrypy.session['user'] = user.username
cherrypy.session['role'] = user.role
return f"স্বাগতম, {user.username}! আপনি '{user.role}' রোলের অধিকারী।<br><a href='/dashboard'>ড্যাশবোর্ড</a>"
else:
return "অভ্যন্তরীণ লগইন ত্রুটি! ভুল ইউজারনেম অথবা পাসওয়ার্ড।<br><a href='/'>পুনরায় চেষ্টা করুন</a>"
@cherrypy.expose
def dashboard(self):
if 'role' not in cherrypy.session:
return "আপনি লগইন করেননি! <br><a href='/'>লগইন করুন</a>"
role = cherrypy.session['role']
if role == "admin":
return "এটি অ্যাডমিন ড্যাশবোর্ড। আপনি সমস্ত অ্যাক্সেস পেয়েছেন।"
elif role == "user":
return "এটি ইউজার ড্যাশবোর্ড। কিছু সীমিত অ্যাক্সেস রয়েছে।"
else:
return "এটি গেস্ট ড্যাশবোর্ড। শুধুমাত্র পড়ার জন্য অ্যাক্সেস।"
if __name__ == '__main__':
cherrypy.quickstart(AuthApp())
কোড ব্যাখ্যা:
check_credentials: ইউজারনেম এবং পাসওয়ার্ড যাচাই করার জন্য একটি ফাংশন।check_role: ইউজারের রোল যাচাই করে যে তারা অনুমোদিত কি না।login: লগইন ফর্মে দেওয়া ইউজারনেম এবং পাসওয়ার্ড যাচাই করে, এবং সেশন তৈরি করে।dashboard: ড্যাশবোর্ডে রোল অনুসারে অ্যাক্সেস প্রদান করে। অ্যাডমিনদের সবকিছু দেখানো হয়, ইউজারদের কিছু সীমিত অ্যাক্সেস দেওয়া হয়, এবং গেস্টদের শুধুমাত্র পড়ার অধিকার দেওয়া হয়।
Access Control (অ্যাক্সেস কন্ট্রোল)
CherryPy তে অ্যাক্সেস কন্ট্রোল একটি গুরুত্বপূর্ণ বিষয়, যা বিভিন্ন পাথের জন্য বিশেষ অ্যাক্সেস নিয়ন্ত্রণ করতে সহায়তা করে। এই কন্ট্রোলটি সেশন বা কুকি ব্যবহার করে বাস্তবায়ন করা যায়।
উদাহরণ: অ্যাক্সেস কন্ট্রোল টুল তৈরি
import cherrypy
class AccessControl:
def check_access(self, required_role):
user_role = cherrypy.session.get('role', None)
if user_role is None or user_role != required_role:
raise cherrypy.HTTPError(403, "Access Denied: Unauthorized access")
class MyApp:
def __init__(self):
self.ac = AccessControl()
@cherrypy.expose
def index(self):
return "এটি সবার জন্য অ্যাক্সেসযোগ্য।"
@cherrypy.expose
@cherrypy.tools.allow(body="POST")
def admin(self):
# অ্যাডমিন রোল চেক
self.ac.check_access('admin')
return "এটি অ্যাডমিন পৃষ্ঠা, শুধুমাত্র অ্যাডমিনের জন্য।"
@cherrypy.expose
def user(self):
# ইউজার রোল চেক
self.ac.check_access('user')
return "এটি ইউজার পৃষ্ঠা, শুধুমাত্র ইউজারদের জন্য।"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
কোড ব্যাখ্যা:
AccessControlক্লাস: এই ক্লাসেcheck_accessমেথডটি ব্যবহারকারীর রোল যাচাই করে এবং প্রয়োজনীয় রোল না থাকলে 403 (Forbidden) ত্রুটি প্রদর্শন করে।adminএবংuserপাথ: শুধু নির্দিষ্ট রোলের জন্য অ্যাক্সেস অনুমোদিত। অন্যথায়, 403 ত্রুটি ফিরিয়ে দেওয়া হবে।
CherryPy তে রোল-ভিত্তিক অনুমোদন এবং অ্যাক্সেস কন্ট্রোলের সুবিধা:
- রোল-ভিত্তিক অ্যাক্সেস: আপনি ব্যবহারকারীর রোলের ভিত্তিতে অ্যাক্সেস কন্ট্রোল করতে পারেন (যেমন: অ্যাডমিন, ইউজার, গেস্ট)।
- কাস্টম সেশন ম্যানেজমেন্ট: CherryPy তে আপনি সেশন ব্যবহার করে ব্যবহারকারীর তথ্য পরিচালনা করতে পারেন।
- অ্যাক্সেস কন্ট্রোল টুলস: আপনি CherryPy এর
toolsব্যবহার করে বিভিন্ন রুটের জন্য আলাদা অ্যাক্সেস কন্ট্রোল সেট করতে পারেন।
CherryPy তে Role-based Authorization এবং Access Control ব্যবস্থাপনা সহজেই বাস্তবায়ন করা যায়। সঠিক রোল-ভিত্তিক অনুমোদন দিয়ে আপনি ব্যবহারকারীদের বিভিন্ন স্তরের অ্যাক্সেস প্রদান করতে পারবেন এবং এক্সেস কন্ট্রোল টুলের মাধ্যমে নির্দিষ্ট রুটে কাস্টম নিরাপত্তা নীতি প্রয়োগ করতে পারবেন। CherryPy এর tools এবং session ব্যবহারের মাধ্যমে এই সমস্ত নিরাপত্তা ব্যবস্থা দক্ষভাবে পরিচালনা করা সম্ভব।
Read more