禁止基于规则链接对象

时间:2015-10-06 13:13:39

标签: django api django-admin authorization django-rest-framework

我有两个模型:DomainRecord。许多记录链接到域。域名和记录拥有其所有者。我想禁止用户在他们不拥有的域中创建记录。但是,如果其他人(例如超级用户)创建了记录并将所有者设置为该特定用户(即使他们不拥有域),他们也应该能够编辑记录。这应该适用于管理站点和API(rest_framework)

我的问题是 - 实现这一目标的最简单方法是什么?是否有一些django插件处理链接权限?我可以在这里使用模型验证器(如果是这样 - 如何区分是否创建了新对象)?

1 个答案:

答案 0 :(得分:1)

这里的问题是Django Rest Framework和Django本身(通过admin)只在模型层面进行交互。为了实现您的目标,我将实施以下设计:

  • 让模特了解其所有者和用户。为此我会使用django-audit-log
  • 覆盖默认模型管理器并在create方法中构建逻辑,我将查询用户的属性并抛出相应的异常。

这样的设计将一些业务逻辑从控制器转移到数据模型 - 有一些关于这种方法的好处和缺陷的争论。但是带有下划线的约束(Django admin和API)是唯一可以放置它的常见位置。

这是你的目标吗?