禁止基于规则链接对象

Disallow linking objects based on a rule

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

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

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

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

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

这是您的目标吗?