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