Как объединить AND и OR в декораторе DRF permission_classes?
Перед выполнением представления я хотел бы проверить несколько разрешений в декораторе permission_classes
, проверяя разрешения с помощью операторов AND и OR. Моя проблема в том, что IsUserInstance
не проверяется в примере ниже, а когда я заменяю &
на and
, то оба разрешения в скобках не проверяются.
Какой лучший способ сделать это? Или, в качестве альтернативы, как я могу создать новое разрешение, которое проверяет IsIndividual
и IsUserInstance
?
views.py
@permission_classes([IsSuperUser | IsManager | (IsIndividual & IsUserInstance)])
class IndividualDetailsView(RetrieveAPIView):
serializer_class = IndividualSerializer
lookup_url_kwarg = "pk"
def get_object(self):
pk = self.kwargs.get(self.lookup_url_kwarg)
return Individual.objects.get(pk=pk)
permissions.py
class IsIndividual(permissions.BasePermission):
def has_permission(self, request, view):
return Individual.objects.filter(pk=request.user.pk).exists()
class IsUserInstance(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return obj == request.user