У меня есть проект, в котором есть рабочие пространства, и каждая рабочая область может иметь любое количество пользователей.Пользователи также могут принадлежать к нескольким рабочим областям, поэтому между ними существует отношение многие ко многим.
Теперь у меня есть создание рабочего пространства и работает членство, но у меня возникают проблемы с настройкой разрешений, чтобы только рабочее пространствоучастники могут видеть рабочее пространство.Я пробовал с пользовательским разрешением уровня объекта, но, похоже, оно не работает.
Модель рабочей области выглядит следующим образом:
class Workspace(models.Model):
name = models.CharField(max_length=100)
users = models.ManyToManyField(User, related_name='workspaces')
Вид выглядит следующим образом:
class WorkspaceViewSet(viewsets.ModelViewSet):
queryset = Workspace.objects.all().order_by('name')
serializer_class = WorkspaceSerializer
permission_classes = [permissions.IsAuthenticated|BelongsInWorkspace]
Сериализатор выглядит так:
class WorkspaceSerializer(serializers.ModelSerializer):
class Meta:
model = Workspace
fields = ('name', 'users')
def create(self, validated_data):
instance = super(WorkspaceSerializer, self)
instance.users.add(self.context['request'].user)
return instance
И, наконец, пользовательское разрешение, которое я пытаюсь использовать здесь:
class BelongsInWorkspace(BasePermission):
def has_permission(self, request, view):
return True
def has_object_permission(self, request, view, obj):
return obj.users.filter(pk=request.user).exists()