我正在设计一个用户管理系统,其中有大量用户(数百万)和少量用户组(100)和少量应用程序(100)。可以从组中添加/删除用户。每个应用程序都为用户分配了角色。例如,一个用户可能对应用程序具有 GUEST 角色,而另一个用户可能对应用程序具有管理角色。具有与应用程序关联的角色/权利的用户可以访问该应用程序。
为此类系统创建 ACL 的行业级方法是什么。
我能想到的最简单的方法是创建一个 xml 文件(或 JSON)并将其附加到每个用户配置文件中。例如,对于“用户 A”,它可能如下所示:
<USER id="user A">
<APP id="app 1"> <ROLE> GUEST </ROLE> </APP>
<APP id="app 2"> <ROLE> ROLE1 </ROLE> <ROLE> ROLE1 </ROLE></APP>
<GROUP id="group 1> <ROLE> MEMBER </ROLE> </GROUP>
</USER>
现在有一些用例需要解决,例如:
提议系统应该能够为整个用户组分配特定角色。在这种情况下,我会 a) 将 User 引用到 Group ,并将 Group 引用到 App。或 b) 将组内的每个用户循环引用到一个 App。
我必须能够轻松查看(查询)组的用户,或访问特定应用程序的用户。
为每个用户/应用程序/组关系创建一个单独的数据库记录并存储它会更好吗?类似“影子”唱片的东西。
为此类系统设计 ACL 的行业指南或方法是什么?
总的来说,我应该能够使用系统执行以下常见任务:
- 获取用户个人资料以及与他关联的应用程序和组
- 获取特定组的成员及其角色(是的,组也可以有角色)
- 获取特定应用的用户及其角色
- 删除/编辑特定应用程序或组的每个用户的角色
- 将新用户添加到组
- 将应用程序添加到一组用户
- 从一组用户中删除应用