Как ограничить доступ к просмотру записей пользователей?

#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 просмотреть все записи с любого пользователя. Как это исправить?


Ответы (0 шт):