Как правильно ограничить просмотр в django rest framework

В моем приложении есть страница, на которой в HTML есть следующие коды:

{% if job.owner == user.username or user.username == 'admin' %}

Это означает, что вошедший в систему пользователь может просматривать задания, которые он/она создал в приложении, а пользователь admin может просматривать все созданные задания, поскольку admin является главным пользователем.

Я пытаюсь применить ту же логику в django rest framework, но это не работает. Теперь только фильтрация owner=request.user. Это работает для того, чтобы только пользователь мог просматривать свои собственные созданные задания, но это также влияет на администратора. Администратор теперь не может просматривать все задания из-за фильтрации. Как мне решить эту проблему?

Вот мой код:

@api_view(['GET'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def jobs(request):
    job = Job.objects.filter(owner = request.user)
    jobserializer = JobViewSeralizers(job, many = True)
    return Response(jobserializer.data)

Вместо использования декоратора или if попробуйте использовать средние программы для ограничения доступа пользователей:

# middelwares.py


from django.http import HttpResponseRedirect
from django.contrib import messages

LOGIN_EXEMPT_URLS = [
    '/',
    'api_url/',
]


class LoginMiddleWare:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if not request.user.is_authenticated or request.user != 'admin' and request.path not in LOGIN_EXEMPT_URLS:
            messages.error(request, 'You should login first!', 'warning')
            return HttpResponseRedirect('/')
        response = self.get_response(request)
        return response

И добавьте его в настройки:

# settings.py

MIDDLEWARE = [
    .
    .
    .

    'djangoProject_app.middlewares.LoginMiddleWare',
]

Вернуться на верх