Как правильно ограничить просмотр в 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',
]