Установить пользовательское разрешение на модель в Django

Мне нужно установить некоторые права на модель в Django, потому что у меня есть некоторые операции в DRF и мне нужно знать, есть ли у пользователя права на это или нет. Мои модели :

class Device(models.Model):
    type = models.ForeignKey(Type, on_delete=models.CASCADE)
    name = models.fields.CharField(max_length=36)
    ip = models.CharField(max_length=64, blank=True)
    password = models.CharField(max_length=62, blank=True)
    mac = models.CharField(max_length=17, blank=True)
    description = models.fields.TextField(max_length=600, blank=True)
    users = models.ManyToManyField(User,'users_device',through="UserMeta")
            
    status = models.BooleanField(default=False)

    def __str__(self):
        return self.name

class UsersMeta(models.Model):
    type_choices = [
        ("owner",'owner'),
        ('user','user'),
        ('admin','admin')
    ]
    user = models.ForeignKey(User,on_delete=models.DO_NOTHING,related_name='UserMeta_devices')
    device = models.ForeignKey(Device,models.CASCADE,related_name='UserMeta_device')
    type = models.CharField(max_length=8,choices=type_choices)
    
    token = models.UUIDField(default=uuid4,
                             editable=False,
                             unique=True)
    join_time = models.DateTimeField(auto_now_add=True)
    last_activate = models.DateTimeField(null=True,blank=True)

Мне нужен доступ с определенными разрешениями к модели Device depending на модели User в модели UserMeta. В UserMeta у меня есть несколько разрешений выбора, например: owner, admin, user, поэтому мне нужно сказать, имеет ли этот пользователь разрешение OWNER, или что-то еще может сделать это или нет.

Я не знаю правильно это или нет, если вы знаете, пожалуйста, скажите мне

Вы можете определить пользовательское разрешение в DRF следующим образом:

permissions.py:

from rest_framework.permissions import BasePermission

class IsOwner(BasePermission):
    """
       Allows access only to owners
    """

    def has_permission(self, request, view):
       user_meta = UsersMeta.objects.filter(user=request.user).first()
       return True if user_meta and user_meta.type == "owner" else False

Использование:

from rest_framework.views import APIView
from rest_framework.response import Response

from .permissions import  IsOwner 

class YourView(APIView):
    permission_classes = (IsOwner,)

    def get(self, request, format=None):
        content = {
             'status': 'owner users'
        }
        return Response(content)
Вернуться на верх