6

您如何确保用户只能编辑他们创建的对象?设置它的最佳方法是什么?

我正在使用 django-rest-framework 并想知道是否有一种方法可以限制用户查看/编辑他们不“拥有”的对象。

class Video(models.Model):
    owner = models.ForeignKey(User)
    ...

因此,用户“x”应该只能编辑其 owner_set 中的视频。

4

1 回答 1

3

大概您有会话并打开了身份验证模型。

您必须确保所有视图(REST 和非 REST)都需要身份验证。

对于非 REST,这很容易。您只需在任何地方使用基本@login-required装饰器。

对于 Django-REST 框架,请阅读:http ://django-rest-framework.org/library/authentication.html#module-authentication 。

您必须使用身份验证混合来确保身份验证确实发生了。

该框架支持基本身份验证,这需要 SSL 连接是安全的。实现不需要 SSL 的 DIGEST 身份验证并不难。

避免会话。登录和注销违反了 REST 的原则。该框架支持会话,但并不理想。

一旦您对所有请求进行了身份验证,您就会知道该用户。

如果您了解用户,则user.video_set可以完美运行。您还可以使用Video.objects.filter(...)来确保您正在查询用户,但如果您使用user.video_set.get(...)oruser.video_set.filter()或其他方式,则更容易确认代码是否正确。

所有相关的授权检查都在 Views 中完成。您正在为您的 ModelResources 提供视图。

这些是“基于类的视图”。文档在这里:https ://docs.djangoproject.com/en/dev/topics/class-based-views/#viewing-subsets-of-objects

诀窍是选择所有正确的混合和序列化程序。

例如,您可以通过这种方式混合获取处理:

http://django-rest-framework.org/howto/mixin.html

您将在get方法中实现过滤器

于 2012-01-21T02:17:19.577 回答