我希望在我的Django应用程序中拥有层级权限。
例如:假设有4个级别 -
Admin
Sub-admin(CountryLevel(CL) Admin)
sub-sub-admin(StateLevel(SL) Admin)
And then normal Users(U).
管理员将创建CL,然后CL将创建SL,最终SL将为用户提供服务。目标是让用户使用平台。
管理员可以对任何用户进行CRUD操作。CL应该可以访问那些由CL创建的SL创建的用户(对象)。相反,SL只能访问由他创建的用户(对象)。此外,用户可以直接注册而无需管理员介入。在这种情况下,用户应该可以访问自己的应用程序。
如何实现这种三级权限?
我能想到的解决方案是(但不确定):
我更新了auth_group
表,并添加了parent_id
。以下是模式。
id, group_name, parent_id
parent_id
的意义在于创建组的树形结构。创建的组数量等于树的高度。例如,考虑以下结构:
id, group_name, parent_id
1 , admin, 0
2, CL, 1
3, SL, 2
现在,当创建(onboarded)任何用户时,我将指定一个
SL group_id
,该ID将添加到auth_user_groups
表中。现在,我想问以下问题:
1)如何管理组的层次级别权限?例如,SL只能访问由他创建的用户,在他下面创建的SL创建的用户CL可以访问所有用户。
2)(不确定我是否考虑正确)现在,因为我已将组SL分配给所有由SL onboarded的用户,这些用户是否能够访问彼此的信息?
3)对于直接登陆的用户(即未通过任何SL),我不需要映射到任何组。对吗?
django-guardian
- Burhan Khalid