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
定义了相同的命名权限)。
很高兴被告知我在想这个错误。