Допустим, у меня есть следующие модели
class Blog(models.Model):
user = models.ForeignKey(User, null=False, on_delete=models.CASCADE)
class Post(models.Model):
blog = models.ForeignKey(Blog, null=False, on_delete=models.CASCADE)
post = models.TextField()
Проблема в том, что создание сообщения позволит мне установить идентификатор блога на что угодно (что существует).Это означает, что я могу создать объект Post, который имеет отношение к Blog
объекту, которому пользователь не «владеет».
Однако существуют простые и документированные способы предотвращения доступа пользователяобъекты с помощью метода GET
, которые им запрещены, путем фильтрации набора запросов и использования check_object_permissions
.Пример:
class PostViewSet(viewsets.ModelViewSet):
serializer = PostSerializer
def get_queryset(self):
return Post.objects.filter(blog__user=self.request.user)
def check_object_permissions(self, request, obj):
if obj.user != request.user:
raise exceptions.PermissionDenied()
super().check_object_permissions(request, obj)
Как решить вышеупомянутую проблему и предотвратить создание отношений с запрещенными объектами самым умным / правильным способом в среде REST Django?