【问题标题】:Disallow linking objects based on a rule禁止基于规则链接对象
【发布时间】:2016-01-03 10:18:14
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    这就是你的目标吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 2021-08-04
      • 2012-01-22
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      相关资源
      最近更新 更多