对象级权限django

时间:2012-01-21 02:00:34

标签: django django-models django-permissions

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

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

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

因此,用户'x'应该只能在其owner_set中编辑视频。

1 个答案:

答案 0 :(得分:2)

大概你有会话并打开了auth模型。

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

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

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

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

该框架支持BASIC身份验证,这需要SSL连接是安全的。实施DIGEST身份验证并不困难,但不需要SSL。

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

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

如果您了解该用户,则user.video_set可以正常运行。您还可以使用Video.objects.filter(...)确保您查询用户,但如果您使用user.video_set.get(...)user.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方法

中实施过滤器