Я пытаюсь создать Django Rest Framework ModelViewSets, которые являются только персоналом. Когда я пытаюсь использовать стандартный декоратор Django @staff_member_required
Я получаю ошибки, которые заставляют меня думать, что декораторы не будут работать с Django Rest Framework.Разрешения только для персонала в Django Rest Framework
Итак, я пытаюсь написать свой собственный MixViewSet. В основном он работает, как я хочу, кроме метода обновления, который я не могу сделать.
Итак, два вопроса: есть ли более элегантный способ сделать это, а если нет, что не так с моим методом обновления? Я не могу найти документацию по обновлению, поэтому я использую свое лучшее предположение о том, как это сделать, но оно не работает.
Спасибо!
Джон
Вот мой класс:
class StaffOnlyModelViewSet(viewsets.ModelViewSet):
def list(self, request):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).list(request)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def retrieve(self, request, pk=None):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).retrieve(request, pk=None)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def create(self, request):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).create(request)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def update(self, request, pk=None):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).update(request, pk=None)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def destroy(self, request, pk=None):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).destroy(request, pk=None)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
1 nitpicky thing ... 401_UNAUTHORIZED обычно используется, чтобы сообщить запрашивающему, что они должны пройти аутентификацию, чтобы получить доступ. 403_FORBIDDEN явно сообщает запрашивающему, что они не могут получить доступ с их аутентифицированными учетными данными (потому что они не являются персоналом). Это, вероятно, не имеет значения, хотя (: –