Django中的权限Heirarchies - 继承自模型和其他权限

时间:2016-05-04 15:40:43

标签: python django permissions

Django允许您为用户和用户组提供对象的自定义权限(django-guardian添加了一些很好的使用方法)。有多种方法可以将用户置于层次结构中。我想要做的是为权限本身添加两种类型的层次结构。例如,如果某人对Book对象具有给定权限,我希望他们在每个Page对象上隐式拥有该权限。此外,如果某人对change拥有Page权限,我希望他们隐含地拥有该view的{​​{1}}权限。

总而言之,我希望Page检查page.has_permission('view', user)page.has_permission('*edit*', user),并page *.book* .has_permission('view', user)检查book.has_permission('view', user)。 (星号只是为了强调。)

我不需要像django-rules那样复杂的任何东西,我更喜欢通用的外键方法,因为我不会有大数字,它会保持模型结构的清晰和集中。我希望避免在视图中重复这些权限关系的逻辑,或者使模型混乱,并且我理想地将此权限结构集中在某处,理想情况下是声明性的。例如

book.has_permission('*edit*', user)

然后,在perm_hierarchy = {'view': ['edit', 'delete', ]} model_perm_hierarchy = { Page : [Chapter, ], Chapter : [Book, ]} 上检查'view'时检查该Page个对象的'edit''delete'权限的图层。

同样,在检查Page权限时,请检查Page是否有相同的权限(如果为Chapter定义了相同的命名权限)。

很高兴被告知我在想这个错误。

1 个答案:

答案 0 :(得分:0)

我在this answer

中的django-guardian上使用django-rules记录解决方案