Проверка пользовательских разрешений Django Rest Framework

Я пытаюсь понять, как лучше всего написать пользовательское разрешение в Django Rest Framework для следующего случая использования.

У меня есть модель User и модель Organization. Модель User может иметь несколько Organizations, а модель Organization может иметь несколько Users. У меня есть такая модель для связи отношений:

class UserOrganization(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
    role = models.CharField(max_length=255, default="Owner")
    primary_org = models.BooleanField(default=False)

Пользователи могут создавать интеграции со сторонними сервисами, но они привязаны как к User, так и к Organization. В настоящее время у меня есть следующее пользовательское разрешение, которое проверяет User, но как проверить, являются ли они членами Organization?

class UserPermission(permissions.BasePermission):

    def has_object_permission(self, request, view, obj):
        # Deny actions on objects if the user is not authenticated
        if not request.user.is_authenticated():
            return False

        if view.action == 'retrieve':
            return obj.user == request.user or request.user.is_admin
        elif view.action in ['update', 'partial_update']:
            return obj.user == request.user or request.user.is_admin
        elif view.action == 'destroy':
            return request.user.is_admin
        else:
            return False

Идентификатор Organization будет передаваться при каждом вызове API. Вот набор представлений для добавления новой интеграции

class IntegrationViewSet(mixins.CreateModelMixin,
                         mixins.ListModelMixin,
                         mixins.RetrieveModelMixin,
                         mixins.UpdateModelMixin,
                         viewsets.GenericViewSet):

    def get_queryset(self):
        user = self.request.user
        return Integration.objects.filter(user=user)

    serializer_class = IntegrationSerializer

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

Как я могу проверить, что User также является членом Organization перед тем, как разрешить любое чтение/создание/обновление?

Вернуться на верх