Мои файлы:
BusinessActionsPermission
class BusinessActionsPermission(BasePermission):
"""
Custom permission to only allow owners of an object to edit it.
"""
def has_permission(self, request, view):
return True
def has_object_permission(self, request, view, obj):
business_obj = view.get_business_obj()
if request.method in ['GET']:
return request.user.has_perm('act_on_business', business_obj)
if request.method in ['PUT', 'PATCH', 'DELETE']:
return request.user.has_perm('act_on_business', business_obj)
return False
EmployeeViewSet
class EmployeeViewSet(viewsets.ModelViewSet):
serializer_class = EmployeeSerializer
permission_classes = (permissions.IsAuthenticated, BusinessActionsPermission)
def get_business_obj(self, **kwargs):
return Business.objects.filter(pk=self.kwargs['business_id'])
def get_queryset(self, **kwargs):
return Employee.objects.filter(business__id=self.kwargs['business_id'])
def create(self, request, *args, **kwargs):
business = Business.objects.get(pk=self.kwargs['business_id'])
employee = Employee(business=business)
serializer = EmployeePOSTSerializer(employee, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors)
BusinessActionsPermission
не работает, пока вызывается метод POST
для создания нового Employee
- EmployeeViewSet
.Пользователь без act_on_busienss
может post
и создать сотрудника.
Документация Django Rest Framework здесь говорит:
По причинам производительности общийПредставления не будут автоматически применять разрешения на уровне объектов к каждому экземпляру в наборе запросов при возврате списка объектов.
, что хорошо.Как BusinessActionsPermission
работает на detailed retrievals with pk
.Но не работает на post
, который не list
.
Пожалуйста, помогите.
Примечание : BusinessActionsPermission
выше отлично работает для детального просмотраи не проверяет вид списка, что совершенно нормально, как указано в документации.Но как насчет post
??