ACL的优点是可以直接为用户设置权限。 权限设置更加灵活,每个用户可以完全不同。 但是,这也增加了管理员设置权限的复杂性。 RBAC更方便用户管理。 这里我不会详细讨论两者之间的细节和比较。 网上有很多相关信息。
这就是我所做的。
设计要求:
1、按项目进行权限控制;
2、项目分为不同的组,如仪表组、DCS组等,每个组采用不同的系统模块;
3、每个组下有不同的岗位用户角色权限设计,如仪器选型、样品维护等,不同岗位的人员有不同的权限,可以使用组内相应系统模块下的不同功能。
第二个对应RBAC的Group,第三个对应RABC的Role。 这部分绘制了如下数据库ER图。
这种结构是通常介绍RBAC的常见结构,比较容易理解。 从ER图中可以看出,权限分配是基于角色的,这是RBAC的主要特点。 同时,从大量资料中可以看出,RBAC一般只能实现功能级别的权限控制,很难实现更细粒度的数据控制,比如行数据甚至字段操作的权限控制。
下面的需求困扰了我很长时间。
1、对于同一职位(角色)的不同人员(角色实例),可以查询该职位所有人员创建的数据,但只能修改或删除自己创建的数据;
2. 对于非您自己创建的数据,您只能访问数据的部分字段。
事实上,第1项是基于行数据的访问控制游戏开发素材,第2项是基于字段的访问控制。 为了满足这两项音效,添加了三个数据表,形成了下面的ER图。
“权限类别”数据表相当于一个枚举变量用户角色权限设计,包含项目、组、角色、个人四个值。 例如,“样本维护-删除-样本”(角色-操作-功能)的操作权限的权限类别属于“个人”,则一行样本数据只能由该数据的创建者删除; 如果数据为“角色”,则所有具有示例维护角色的人员都可以删除该数据。 这样就可以满足要求1。
以上只是我设计这个权限的初步想法。 它尚未被验证且尚未被编码。 欢迎贡献!