django - django 对象级权限

标签 django django-models django-permissions

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

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

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

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

最佳答案

大概您有 session 并且打开了身份验证模型。

您必须确定 全部 View (REST 和非 REST)需要身份验证。

对于非 REST,这很容易。您只需使用基本的 @login-required无处不在的装饰者。

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

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

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

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

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

如果您认识用户,则 user.video_set完美地工作。您也可以使用 Video.objects.filter(...)确保您正在查询用户,但如果您使用 user.video_set.get(...) 更容易确认代码是正确的或 user.video_set.filter()管他呢。

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

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

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

例如,您可以通过以下方式混合 get 处理:

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

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

关于django - django 对象级权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950080/

相关文章:

python - Django:如何读取嵌套的 url 正则表达式

Django - 自定义过滤器来检查文件是否存在

django - DRF:自定义权限被拒绝的消息

Django 站点框架权限

python - DjangoForeignKey self 条件

django - 如何创建基于 ID 的 PUT/POST,但在 DRF 中的响应中创建详细信息?

python - 服务器 : I moved from python 2. 7 到 3.5 上的 django 应用程序和 apache2 找不到 django

sql - Django 。数据库查询: distinct for one field

Django 管理列表过滤器

django - 使用自定义用户模型在管理员中添加员工用户权限