Django - 比较Django权限和使用Django规则

9
目前我正在寻找在Django中实现访问控制的方法。我已经了解了内置权限,但它不能基于对象进行控制。例如,我想要像“只有创建者可以删除自己的项目”这样的权限。因此,我了解了django-guardian。然而,经过思考后,我认为如果约束条件发生变化,管理和检查可能会很困难。
我看了下一个流行的权限管理应用程序django-rules。这似乎适合我所需的。然而,我认为django-rules需要涉及模型实例(因此是对象级别),即使我需要一个简单的视图,例如“成员区域”,它也无法执行此功能。
这使我开始考虑同时使用contrib的权限框架和django-rules。我的问题是,在管理两个权限框架方面会有多么容易?例如,我有不同的用户组。我担心重叠的情况,其中管理员在管理系统中添加了特定的权限(以允许访问视图),认为这足以满足要求,但结果却被规则所限制。
我相信这是一个常见的情况,我谦虚地寻求您的建议和推荐,基于您的经验。

Django的规则不需要模型实例。模型实例是可选的。 - Pablo Vergés
1个回答

1

如果您是通过Django管理站点进行此操作,您可以重写方法,例如has_delete_permission()。这些方法会获取请求和对象作为参数,因此您可以使用它来设置规则,例如“用户X只能删除自己的对象”。


不是通过管理网站完成的,但还是谢谢。我没有注意到那些方法。 - goh
如果你想通过自己的代码实现这个功能,你可以在你的模型中添加像 user_can_delete(self, user) 这样的方法,并且在你自己的代码以及 has_delete_permission() 管理员方法中使用它们。 - che

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接