Django rest framework пользовательская модель разрешений

Я создаю веб-приложение, используя REST API, и у меня есть 4 пользователя, которым я хочу предоставить доступ только к тому контенту, который они добавили в бэкэнд. Я создал 3 пользователей, скажем, фермеров (3 фермера) и добавил контент для каждого из них. Однако я не смог реализовать права доступа так, чтобы фермер мог просматривать и удалять только то, что он добавил. Вот мой код в models.py

User = get_user_model()

# Create your models here.

class Tender(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
description = models.TextField()
date_due = models.DateField(default=datetime.date.today)
location = models.CharField(max_length=255, null=False)
contact = models.PositiveIntegerField(null=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

class Input(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
description = models.TextField()
price = models.DecimalField(max_digits=10, decimal_places=2)
quantity = models.DecimalField(max_digits=10, decimal_places=2)
contact = models.PositiveIntegerField(null=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

class Investor(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255, unique=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
description = models.TextField()
location = models.CharField(max_length=255, null=False)
contact = models.PositiveIntegerField(null=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name 

Вот что я реализовал в permissions.py

from rest_framework import permissions


class IsOwnerOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        if request.user == obj.author:
            return True
        return False

class IsOwnerOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
    
        if request.user == obj.user :
            return True
        return False

Вот мой код в файле views.py:



def has_object_permission(self, request, view, obj):
    # Read permissions are allowed to any request,
    # so we'll always allow GET, HEAD or OPTIONS requests.
    if request.method in permissions.SAFE_METHODS:
        return True

    # Instance must have an attribute named `owner`.
    return obj.owner == request.user

Этот код дает право просмотра всем пользователям

Если вы хотите ограничить все разрешения, попробуйте сделать что-то вроде этого

def has_object_permission(self, request, view, obj):

    # Instance must have an attribute named `owner`.
    return obj.owner == request.user
Вернуться на верх