Как ограничить доступ к просмотру записей пользователей?
#models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Модель юзера
class CustomUser(AbstractUser):
STATUS_CHOICES_TYPE = [
('Заказчик', 'Заказчик'),
('Сотрудник', 'Сотрудник')
]
telephone = models.CharField(max_length=20, null=False, verbose_name='Номер телефона')
photo = models.ImageField(upload_to="users/%Y/%m/%d/", null=False, verbose_name='Фотография')
type = models.CharField(max_length=11, choices=STATUS_CHOICES_TYPE, default='Заказчик',
verbose_name='Тип пользователя')
# Модель задач
class Todo(models.Model):
STATUS_CHOICES = [
('Ожидает исполнителя', 'Ожидает исполнителя'),
('В процессе', 'В процессе'),
('Выполнена', 'Выполнена'),
]
title = models.CharField(max_length=255)
description = models.TextField(blank=True)
creator = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=False, related_name='created_tasks')
executor = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True,
blank=True, related_name='assigned_tasks')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
updated_at = models.DateTimeField(auto_now=True, verbose_name='Дата обновления')
closed_at = models.DateTimeField(null=True, blank=True, verbose_name='Дата закрытия')
report = models.TextField(blank=True, verbose_name='Отчет')
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='Ожидает исполнителя',
verbose_name='Статус')
def __str__(self):
return f"Задача {self.id}: {self.creator} -> {self.executor}"
#api.py
from .models import Todo
from rest_framework import mixins
from .serializers import TodoSerializer
from django.contrib.auth import get_user_model
from rest_framework.viewsets import GenericViewSet
from .permissions import IsCreator
# Auth_JWT
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
class Home(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request):
content = {'message': 'Hello world!'}
return Response(content)
CustomUser = get_user_model()
# Создание и просмотр записей заказщиком
class CrateListTodoViewSet(mixins.CreateModelMixin, mixins.ListModelMixin, GenericViewSet):
serializer_class = TodoSerializer
permission_classes = [IsCreator, IsAuthenticated]
queryset = Todo.objects.all()
#permissions.py
from rest_framework import permissions
class IsCreator(permissions.BasePermission):
message = "Пользователь не является создателем записи"
def has_object_permission(self, request, view, obj):
if obj.creator == request.user:
return True
return False
При аутентификациии пользователя с правами "IsCreator" записи просмотр и создание разрешен, хотя я думал ограничить этим permission взаимодействие других пользователей с записями создателя. В итоге я могу через postman просмотреть все записи с любого пользователя. Как это исправить?