Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. কাস্টম মডেল পারমিশন তৈরি করা

কাস্টম মডেল পারমিশন তৈরি করা

Django-তে কাস্টম মডেল পারমিশন অ্যাডমিন প্যানেল থেকে ব্যবহারের সুবিধা আছে, এবং সেই পারমিশন CRUD অপারেশনের সময় চেক করা যায়। নিচে আমি দেখাচ্ছি কীভাবে কাস্টম মডেল পারমিশন তৈরি করা এবং তা CRUD অপারেশনে চেক করা যায়:

১. কাস্টম মডেল পারমিশন তৈরি করা

Django-এর Meta ক্লাসে permissions অ্যাট্রিবিউট ব্যবহার করে আপনি কাস্টম পারমিশন তৈরি করতে পারেন। এই পারমিশনগুলো অ্যাডমিন প্যানেলে প্রদর্শিত হবে এবং ব্যবহারকারী বা গ্রুপের সাথে অ্যাসাইন করা যাবে।

from django.core.exceptions import PermissionDenied
from django.db import models

class Company(models.Model):
    name = models.CharField(max_length=255)
    logo = models.ImageField(upload_to='uploads/company_logos/', blank=True, null=True)

    class Meta:
        permissions = [
            ('can_upload_logo', 'Can upload or update company logo'),  # কাস্টম পারমিশন
        ]

    def save(self, *args, **kwargs):
        # Get the current logged-in user
        user = kwargs.pop('user', None)
        if user and not user.has_perm('app_label.can_upload_logo'):
            raise PermissionDenied("You do not have permission to upload or update the company logo.")
        
        # Call the parent class save method if permission is granted
        super().save(*args, **kwargs)

২. পারমিশন চেক করা

উপরের কোডে save মেথডে আমরা has_perm মেথড ব্যবহার করেছি, যা মডেল লেভেলে পারমিশন চেক করে। user.has_perm('app_label.can_upload_logo') এই চেকটি করবে যে ব্যবহারকারী পারমিশন পেয়েছে কিনা।

এখানে app_label বলতে আপনার অ্যাপের নামকে বুঝাচ্ছে। আপনি যে অ্যাপের মধ্যে মডেলটি তৈরি করছেন, সেই অ্যাপের লেবেল এখানে উল্লেখ করবেন।

৩. পারমিশন অ্যাডমিন প্যানেলে যোগ করা এবং ব্যবহার করা

এখন এই পারমিশন Django-এর অ্যাডমিন প্যানেল থেকে User বা Group-এ অ্যাসাইন করা যাবে:

  1. অ্যাডমিন প্যানেলে যান।
  2. User বা Group-এ গিয়ে পারমিশন সেট করুন।
  3. আপনার নির্দিষ্ট কাস্টম পারমিশন (যেমন: Can upload or update company logo) নির্বাচন করুন।

৪. CRUD অপারেশনে পারমিশন চেক করা

পারমিশন চেক করে আপনি কন্ট্রোল করতে পারবেন যে কোনো ব্যবহারকারী মডেলের উপর কী ধরনের CRUD অপারেশন করতে পারবে। উদাহরণস্বরূপ, যখন কোম্পানির লোগো আপডেট করতে চাইবেন, তখন পারমিশন চেক হবে এবং যদি ব্যবহারকারীর সেই পারমিশন না থাকে, তাহলে তাদেরকে PermissionDenied এক্সেপশন দেওয়া হবে।

৫. View বা API ফাংশনে পারমিশন চেক করা

View বা API তেও পারমিশন চেক করতে পারেন:

from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404
from .models import Company

def update_company_logo(request, company_id):
    company = get_object_or_404(Company, pk=company_id)

    # Check if the user has permission to upload the logo
    if not request.user.has_perm('app_label.can_upload_logo'):
        raise PermissionDenied("You do not have permission to upload or update the company logo.")
    
    if request.method == 'POST':
        logo = request.FILES.get('logo')
        company.logo = logo
        company.save(user=request.user)
        return JsonResponse({'message': 'Logo updated successfully!'})

সংক্ষেপে:

  • Custom Model Permission: কাস্টম মডেল পারমিশন Meta ক্লাসে যুক্ত করে, সেটি অ্যাডমিন প্যানেলে প্রদর্শিত হবে।
  • Permission Checking: has_perm মেথড ব্যবহার করে CRUD অপারেশনের সময় পারমিশন চেক করা হবে।
  • View/API: ভিউতে পারমিশন চেক করে ব্যবহারকারীদের অ্যাক্সেস কন্ট্রোল করা যাবে।

এটি খুব কার্যকর পদ্ধতি যেখানে আপনি নির্দিষ্ট মডেলের জন্য নির্দিষ্ট ব্যবহারকারী বা গ্রুপকে বিশেষ পারমিশন দিতে চান।

How can we help?