Web2Py-তে Access Control Lists (ACL) ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনে ইউজারদের অ্যাক্সেস কন্ট্রোল করা হয়। ACL একটি নিরাপত্তা ব্যবস্থা যা নির্ধারণ করে যে কাদের কোন রিসোর্স বা কার্যক্রমে অ্যাক্সেস থাকবে এবং কাদের থাকবে না। Web2Py এর মধ্যে ACL ব্যবস্থাটি ইউজার অথেনটিকেশন এবং অথোরাইজেশনের জন্য খুবই গুরুত্বপূর্ণ।
Web2Py তে Authorization (অথোরাইজেশন) এবং Authentication (অথেনটিকেশন) ব্যবস্থাপনার জন্য একটি শক্তিশালী বিল্ট-ইন সিস্টেম রয়েছে যা ACL এর মাধ্যমে অ্যাক্সেস কন্ট্রোল প্রতিষ্ঠা করতে সাহায্য করে।
Web2Py তে ACL ব্যবহারের মূল উপাদান
Web2Py তে ACL ব্যবহারের জন্য প্রধানত দুটি বিষয় কাজ করে:
- Authentication (অথেনটিকেশন): ইউজারের পরিচয় যাচাই করা, অর্থাৎ তারা সঠিক ইউজার কিনা।
- Authorization (অথোরাইজেশন): ইউজারের কনফিগার করা নির্দিষ্ট অনুমতি এবং প্রিভিলেজ যাচাই করা।
Web2Py এ Authorization এবং Authentication পরিচালনা করার জন্য auth নামক একটি ইন-বিল্ট মডিউল রয়েছে। auth মডিউলটি ACL ব্যবস্থাপনা করতে সাহায্য করে।
Web2Py তে ACL ব্যবহারের জন্য ধাপসমূহ
১. ইউজার অথেনটিকেশন চালু করা
Web2Py তে ইউজার অথেনটিকেশন এবং ACL ব্যবস্থাপনার জন্য প্রথমে auth মডিউলটি সক্রিয় করতে হবে। সাধারণত, Web2Py তে ডিফল্টভাবে এটি ইনস্টল এবং কনফিগার করা থাকে।
auth.define_tables() ফাংশন ব্যবহার:
auth.define_tables()ফাংশনটি ডাটাবেসের জন্য ইউজার অথেনটিকেশন সম্পর্কিত টেবিল তৈরি করে।models/db.py:
db = DAL('sqlite://storage.db') # ইউজার টেবিল তৈরি করা auth.define_tables()
২. ইউজারের অনুমতি (Permissions) সেট করা
এখানে auth মডিউল ব্যবহারের মাধ্যমে ইউজারদের অনুমতি নির্ধারণ করা যায়, যেমন কোন ইউজার কি ধরনের অ্যাক্সেস পাবে। Web2Py তে ডিফল্টভাবে কয়েকটি role এবং permission ফিচার রয়েছে।
ইউজারের রোল (Roles) নির্ধারণ: একটি রোল হলো এমন একটি সেট যা নির্ধারিত অনুমতিসমূহের একটি সংকলন। সাধারণত, ইউজারকে রোল দেওয়া হয়, যেমন
admin,user,editorইত্যাদি।কন্ট্রোলার (controllers/default.py):
def index(): if auth.is_logged_in(): user = auth.user if auth.has_membership('admin'): return dict(message="Welcome, Admin!") else: return dict(message="Welcome, User!") else: return redirect(URL('user/login'))এখানে,
auth.has_membership('admin')চেক করবে যে ইউজারadminরোলের সদস্য কিনা। এর মাধ্যমে অ্যাক্সেস কন্ট্রোল করা যায়।
৩. Permission চেক করা
Web2Py তে permissions নির্ধারণ করার জন্য auth.has_permission() ফাংশন ব্যবহার করা হয়। এটি নির্দিষ্ট একটি রিসোর্স বা অ্যাকশনকে কন্ট্রোল করতে ব্যবহৃত হয়।
def admin_dashboard():
if not auth.has_permission('admin'):
return redirect(URL('default', 'index')) # যদি ইউজারের অ্যাক্সেস না থাকে
return dict(message="Welcome to the Admin Dashboard!")
এখানে auth.has_permission('admin') চেক করবে যে ইউজার admin রোলের অধিকারী কি না।
৪. Role এবং Permission তৈরি করা
Web2Py তে auth মডিউল ব্যবহার করে রোল এবং permissions তৈরি করা যেতে পারে।
রোল তৈরি করা:
auth.add_role('admin') auth.add_role('user')একটি ইউজারে রোল অ্যাসাইন করা:
auth.add_membership('admin', user_id)ইউজারের Permission সেট করা:
auth.add_permission('admin', 'some_resource') # admin রোলের জন্য অ্যাক্সেস
৫. Access Control Lists (ACL) - ACL ব্যবহার করা
Web2Py তে ACL ব্যবস্থাপনা করার জন্য, আপনি auth.permission টেবিল ব্যবহার করতে পারেন, যেখানে ইউজারদের রোল এবং তাদের কাছে নির্দিষ্ট অনুমতি (permissions) থাকতে পারে।
উদাহরণ:
ধরা যাক, আমরা একটি সিস্টেমে দুইটি রোল তৈরি করতে চাই, admin এবং user। আমরা admin রোলকে সম্পূর্ণ অ্যাক্সেস দিতে চাই, এবং user রোলকে কেবলমাত্র কিছু নির্দিষ্ট রিসোর্সে অ্যাক্সেস দিতে চাই।
models/db.py:
db.define_table('resource', Field('name', 'string'), Field('description', 'text')) # অ্যাক্সেস কন্ট্রোল: admin রোলের জন্য সম্পূর্ণ অ্যাক্সেস এবং user রোলের জন্য সীমিত অ্যাক্সেস auth.add_role('admin') auth.add_role('user') # admin রোলের জন্য সম্পূর্ণ অ্যাক্সেস প্রদান auth.add_permission('admin', 'resource') # user রোলের জন্য কিছু নির্দিষ্ট অ্যাক্সেস auth.add_permission('user', 'resource', 'view')controllers/default.py:
def view_resource(): if auth.has_permission('admin'): resources = db().select(db.resource.ALL) else: resources = db(db.resource.id > 0).select() return dict(resources=resources)
এখানে admin রোল সম্পূর্ণ resource টেবিল অ্যাক্সেস করতে পারবে, তবে user রোল শুধু রিসোর্স দেখার (view) অনুমতি পাবে।
Web2Py তে ACL ব্যবহারের সুবিধা
- নিরাপত্তা: ACL ব্যবহারের মাধ্যমে আপনি অ্যাপ্লিকেশনে ইউজারের অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন, যেমন কোন ইউজার কোন রিসোর্স বা অ্যাকশন অ্যাক্সেস করতে পারবে এবং কোনটা পারবে না।
- রোল এবং পারমিশন ভিত্তিক কন্ট্রোল: Web2Py তে ইউজারের জন্য বিভিন্ন রোল এবং পারমিশন তৈরি করা যায়, যা অ্যাপ্লিকেশনের ব্যবস্থাপনাকে আরও সহজ এবং নিরাপদ করে।
- ফ্লেক্সিবিলিটি: ACL এর মাধ্যমে ডেভেলপাররা খুব সহজে কাস্টম অ্যাক্সেস কন্ট্রোল সিস্টেম তৈরি করতে পারেন, যাতে নির্দিষ্ট ইউজারদের নির্দিষ্ট ফিচার বা পেজে অ্যাক্সেস দেওয়া হয়।
সারাংশ
Web2Py তে Access Control Lists (ACL) ব্যবহার করে ইউজারের অ্যাক্সেস কন্ট্রোল করা যায়। Authentication এবং Authorization এর মাধ্যমে ইউজারদের পরিচয় যাচাই এবং নির্দিষ্ট রিসোর্সের প্রতি অনুমতি প্রদান করা হয়। Web2Py তে auth মডিউল ব্যবহার করে roles, permissions এবং ACL সিস্টেম প্রতিষ্ঠা করা সহজ এবং নিরাপদ হয়, যা অ্যাপ্লিকেশন নিরাপত্তা নিশ্চিত করে।
Read more