Проверка пользовательских разрешений 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
перед тем, как разрешить любое чтение/создание/обновление?