对象级权限django

9-b*_*its 6 django django-models django-permissions

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

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

class Video(models.Model):
    owner = models.ForeignKey(User)
    ...
Run Code Online (Sandbox Code Playgroud)

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

S.L*_*ott 3

假设您有会话并且身份验证模型已打开。

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

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

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

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

该框架支持 BASIC 身份验证,这需要 SSL 连接才能保证安全。实现 DIGEST 身份验证并不太困难,它不需要 SSL。

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

一旦所有请求都经过身份验证,您就会了解该用户。

如果您了解用户,那么user.video_set效果就很好。您还可以使用它Video.objects.filter(...)来确保您正在查询用户,但是如果您使用user.video_set.get(...)oruser.video_set.filter()或其他任何东西,则更容易确认代码是否正确。

所有相关的授权检查都是在视图中完成的。您正在为您的模型资源提供视图。

这些是“基于阶级的观点”。文档位于: https: //docs.djangoproject.com/en/dev/topics/class-based-views/#viewing-subsets-of-objects

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

例如,您可以这样混合 get 处理:

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

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