python - Django中的对象权限基于特定模型属性的值
问题描述
我试图弄清楚如何设置一些权限来访问和更改 Django 中的一些模型。我认为内置权限系统不够灵活,我很确定答案在Django Guardian中,但我无法弄清楚如何将其应用于我的案例。
我拥有的模型结构要复杂得多,但我认为以下简化的用例说明了我在设置权限时遇到的瓶颈,如果我解决了这个问题,我应该能够在需要的地方将其应用于其余模型.
让我们考虑以下三个模型:
- 组织:研究组织,通常是大学。
- 用户:Web 应用程序的注册用户,可以是贡献者(默认)或维护者(所有维护者也是贡献者)。这两个目前是小组,但如果这样更好,我愿意尝试其他方法。用户将始终属于一个组织
- ValuableData:作为一些研究的结果获得的一些数据。它由贡献者添加,它们属于添加数据时用户所属的组织。它还具有可见性。
现在,最后一点是问题所在。可见性定义了谁有权对 ValuableData 执行什么操作,它可以采用三个值:
- 私人:只有添加数据的用户才能查看、更改或删除该数据。没有其他人可以以任何方式访问它——除了超级用户,但现在让我们忽略它。
- 内部:ValuableData 组织内的任何用户都可以查看数据;只有同一组织内的维护者可以更改或删除它。
- 公共:任何用户 - 无论其组织如何 - 都可以查看数据;只有同一组织内的维护者可以更改或删除它。
我需要处理的权限是标准权限(添加、查看、更改和删除),但在对象级别定义。这就是为什么我认为 Django Guardian 是答案,但是如何或在哪里——在应用程序、类或函数的哪个文件中——它们需要被应用让我无法理解。作为最后一条信息,我正在使用 Django Admin 来访问用于添加和更改模型的所有功能(既然它已经存在,为什么不呢?),但我很高兴编写一个自定义的,如果这将使从长远来看,我的生活更轻松。
总而言之,有没有人给我任何建议来设置上述权限结构 - 我最初认为这是一个简单的结构,但似乎并不那么明显。
非常感谢您的支持,
迭戈
解决方案
推荐阅读
- r - 计算多面体之间的重叠百分比(n 维)
- css - 如何将两个css类优化为一个
- c++ - 为什么在生成应用程序版本时显示错误消息
- google-cloud-platform - GCP CloudRun - 添加 NAT 网关或内部服务入口全部?
- reactjs - 如何从材质 ui 更改 Slider 的气泡头中显示的内容?
- angular - Angular Unit Test - TypeError:无法读取未定义的属性“名称”
- excel - VBA 错误 运行时错误 6 '溢出',有什么问题?
- visual-studio - Visual Studio 2019“解决方案资源管理器”“查看代码”图标 C#
- python - 以相等的比例设置 matplotlib 3D 轴
- flutter - 是否可以在颤动的 TextFormField 中显示外键数据