১. মডেলে কাস্টম পারমিশন যোগ করা
Book মডেলে একটি কাস্টম পারমিশন যোগ করার জন্য আমরা মডেলের Meta ক্লাসে permissions অ্যাট্রিবিউট ব্যবহার করব। ধরুন, আমরা একটি can_publish_book নামে কাস্টম পারমিশন তৈরি করতে চাই, যা বই প্রকাশ করার জন্য ব্যবহৃত হবে।
# models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()
class Meta:
permissions = [
("can_publish_book", "Can publish book"),
]
def __str__(self):
return self.title
এখানে, permissions তালিকায় টুপল আকারে কাস্টম পারমিশন যোগ করা হয়েছে। can_publish_book হচ্ছে পারমিশনের কোডনেম, আর "Can publish book" হচ্ছে পারমিশনের human-readable নাম।
২. মাইগ্রেশন চালান
মডেলে পরিবর্তন আনার পর মাইগ্রেশন ফাইল তৈরি এবং প্রয়োগ করতে হবে।
python manage.py makemigrations
python manage.py migrate
৩. অ্যাডমিন প্যানেল থেকে পারমিশন অ্যাসাইন করা
এখন অ্যাডমিন প্যানেলে যান এবং আপনার তৈরি করা can_publish_book পারমিশনটি কোনো নির্দিষ্ট ইউজার বা গ্রুপকে অ্যাসাইন করুন।
- Users বা Groups এ যান।
- যাকে পারমিশন দিতে চান, সেই ইউজার বা গ্রুপ সিলেক্ট করুন।
- Permissions সেকশনে গিয়ে Book | Can publish book পারমিশনটি সিলেক্ট করুন।
- পারমিশন সেভ করুন।
৪. ভিউ তে কাস্টম পারমিশন চেক করা
এখন ভিউ ফাংশন বা ক্লাসে এই কাস্টম পারমিশন চেক করা যায়। আমরা উদাহরণস্বরূপ একটি ভিউ দেখাব, যেখানে শুধুমাত্র can_publish_book পারমিশন থাকা ইউজাররা বই প্রকাশ করতে পারবে।
has_perm মেথড ব্যবহার করে চেক করা
# views.py
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseForbidden
from .models import Book
def publish_book(request, pk):
book = get_object_or_404(Book, pk=pk)
if request.user.has_perm('app_name.can_publish_book'):
# এখানে আপনার বই প্রকাশের লজিক যোগ করুন
return HttpResponse(f"{book.title} প্রকাশিত হয়েছে!")
else:
return HttpResponseForbidden("আপনার বই প্রকাশ করার অনুমতি নেই।")
এখানে request.user.has_perm('app_name.can_publish_book') চেক করা হয়েছে, যেখানে app_name আপনার অ্যাপের নাম। ইউজারের যদি can_publish_book পারমিশন থাকে, তবে বই প্রকাশিত হবে। অন্যথায় 403 Forbidden এরোর দেখানো হবে।
ডেকোরেটর দিয়ে পারমিশন চেক করা
Django-র permission_required ডেকোরেটর ব্যবহার করে একই কাজ করা যায়।
# views.py
from django.contrib.auth.decorators import permission_required
from django.shortcuts import get_object_or_404
from django.http import HttpResponse
from .models import Book
@permission_required('app_name.can_publish_book', raise_exception=True)
def publish_book(request, pk):
book = get_object_or_404(Book, pk=pk)
# এখানে আপনার বই প্রকাশের লজিক যোগ করুন
return HttpResponse(f"{book.title} প্রকাশিত হয়েছে!")
raise_exception=True ব্যবহার করার কারণে যদি ইউজারের পারমিশন না থাকে তবে PermissionDenied এক্সেপশন ঘটবে এবং এটি স্বয়ংক্রিয়ভাবে 403 Forbidden পেজ দেখাবে।
সংক্ষেপে
১. মডেলের Meta ক্লাসে কাস্টম পারমিশন যোগ করা হয়। ২. মাইগ্রেশন চালানো হয়। ৩. অ্যাডমিন প্যানেলে ইউজার বা গ্রুপকে কাস্টম পারমিশন অ্যাসাইন করা হয়। ৪. ভিউ ফাংশনে has_perm মেথড বা permission_required ডেকোরেটর ব্যবহার করে পারমিশন চেক করা হয়।
এইভাবে Django তে কাস্টম পারমিশন তৈরি এবং ব্যবহারের পুরো প্রক্রিয়াটি সম্পন্ন করা যায়।