欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(转)基于角色的权限设计 - 数据库

程序员文章站 2022-04-25 13:31:56
...

最近项目中需要设计一个权限系统,收集了一下资料,权限系统主要有两种技术:ACL(Access Control List)和RBAC(Role-Based Access Control)。前者是将用户直接和权限关联,并通过Group来组织这些用户,windows 系统的用户权限就应该属于这一种(有待确认)。后者通过角色将用户和权限隔离开来,对角色赋予权限,而一个用户就一种角色的一个实例。

 

ACL的优点是能够直接针对用户进行权限设置,权限设置较为灵活,每个用户都可以完全不同,但是这也增加了管理员设置权限的复杂性。RBAC更便于用户的管理。对于两者的详述和比较在不在此啰嗦,网上有很多相关资料。

 

下面就说我做的事情。

 

设计需求:

1.  以项目为单位的权限控制;

2.  项目分为不同的小组,比如仪表组、DCS组等,每个组所使用的系统模块不同;

3.  每个小组下面又有不同岗位,比如仪表选型、样本维护等。不同岗位的人员,对该小组对应的系统模块下的不同功能的使用权限不同。

 

第2对应RBAC的Group,第3对应RABC的Role,这一部分画出了如下的数据库ER图。

(转)基于角色的权限设计 - 数据库 
            
    
    博客分类: 系统设计工具 RBAC权限控制 

 

这中结构就是通常介绍RBAC的通用结构,比较容易理解。从ER图中可以看出,权限分配是以角色为单位,这是RBAC的最主要的特点。同时,从很多资料中看到,RBAC一般只做到功能级别的权限控制,而对于更加细粒度的数据控制很难实现,比如细化到行数据,甚至是字段的操作权限控制。

 

下面的这些需求就是让我纠结了很久。

1. 对于同一岗位(角色)的不同人员(角色实例),能够查询该岗位的所有人员创建的数据,但是只能够修改或删除自己所创建的数据;

2. 对于非自己所创建的数据,只能访问该数据的部分字段。

其实,第1条就是基于行数据的访问控制,第2条就是基于字段的访问控制。为了满足这两项,添加了三张数据表,形成了下面的ER图。

(转)基于角色的权限设计 - 数据库 
            
    
    博客分类: 系统设计工具 RBAC权限控制 

权限类别”数据表相当于一个枚举变量,包括 项目、组、角色、个人四个值,比如一项“样本维护-删除-样本”(角色-操作-功能)的操作权限的权限类别属于“个人”,那么一行样本数据只能够由该数据的创建者删除;如果数据“角色”,那么该数据可以由所有的样本维护角色的人员来删除。这样,就可以满足第1条需求了。

上述仅为自己做这个权限设计的初始想法,还未验证,也未进行编码,欢迎各位拍砖!

相关标签: RBAC 权限控制