Django中基于特定模型属性值的对象权限

2024-05-15 14:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图弄清楚如何设置一些权限来访问和更改Django中的一些模型。我认为内置的权限系统不够灵活,我很确定答案在Django Guardian中,但我还没有弄清楚如何将其应用到我的案例中

我拥有的模型的结构要复杂得多,但我认为下面的简化用例说明了我在设置权限时的瓶颈,如果我解决了这个问题,我应该能够在需要的地方将它应用到其余的模型中

我们考虑以下三个模型:

  • 组织:一个研究组织,通常是一所大学
  • 用户:web应用程序的注册用户,可以是贡献者(默认)或维护者(所有维护者也是贡献者)。这两个小组目前正在进行,但我愿意尝试其他更好的方法。用户将始终属于某个组织
  • 有价值的数据:通过某些研究获得的一些数据。它是由贡献者添加的,它们属于用户在添加数据时所属的组织。它还具有可见性

现在,最后一点是问题所在。可见性定义了谁有权对ValuableData执行操作,它可以采用三个值:

  • Private:只有添加数据的用户才能查看、更改或删除该数据。除了超级用户之外,没有人可以以任何方式访问它,但现在我们忽略这一点
  • 内部:ValuableData组织内的任何用户都可以查看数据;只有同一组织内的维护人员才能更改或删除它
  • 公共:任何用户,无论其组织如何,都可以查看数据;只有同一组织内的维护人员才能更改或删除它

我需要处理的权限是标准权限(添加、查看、更改和删除),但是在对象级别定义的。这就是为什么我认为Django Guardian是答案,但我无法理解它们需要在应用程序、类或函数的哪个文件中被应用。作为最后一条信息,我正在使用Django管理员访问所有用于添加和更改模型的功能(因为它已经存在,为什么不存在?),但我很乐意编写一个自定义的,如果这能让我的生活更轻松的话

总之,有没有人可以给我一些建议来设置上面的权限结构?我最初认为这是一个简单的结构,但看起来并不是那么明显

非常感谢您的支持

迭戈


Tags: 数据django答案用户模型应用程序权限定义