Как объединить 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
Вернуться на верх