权限设计系统——RBAC

Posted 小可爱的大笨蛋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了权限设计系统——RBAC相关的知识,希望对你有一定的参考价值。

权限设计系统——RBAC

​ 权限系统是针对与用户设计,不同的用户进入拥有不同的身份,而不同的身份则会导致他们能够使用到系统中的功能出现不同。这些功能即需要前端展示时的控制,也需要后端权限的校验。

1. RBAC

​ RBAC(Role-Based Access Control)是一套很成熟的权限设计模型。是一个基于角色所控制的系统,所谓角色,就是用户的身份,整个模型围绕着角色设计。

​ 一种常见的权限设计模型如下图:

​ 将用户和所对应的权限直接关联,这种将用户和权限直接关联的方式看起来很直接。一个用户可以拥有多个权限,而这些权限的信息都储存在用户权限表中,在小规模系统,或者说用户较少时比较便于管理,逐个用户授权,人说较多时,就显得有些麻烦,大部分的用户可能都是拥有者同样的权限,重复性极高。这个时候既可以引入角色。

​ 每一个普通员工有用的权限一定是一样的,部门管理者在权限上可能存在差异,而这一部分人往往是少数。设计以角色为核心的权限系统,可以减少数据库开销的同时,减少使用者的重复工作,这对于使用者是很友好的。RBAC的设计模型如下图:

2. 数据库设计

2.1 部门表(sys_dept,非必须)

​ 部门表主要是用来存放部门的基本信息。

字段备注
dept_id部门编号
dept_name部门名称
pid部门父id

2.2 用户表(sys_user)

​ 用户表主要用来存放用户的基本信息。

字段备注
user_id用户编号
username用户名
password密码
dept_id所在部门编号

2.3 角色表(sys_role)

​ 角色表主要用来存放角色的基本信息。

字段备注
role_id角色编号
role_name角色名称

2.4 权限表(sys_permission)

​ 权限表是用来存系统中包含的权限信息的。

字段备注
per_id权限编号
per_name权限名称
per_nation权限的标识符

2.5 用户角色表(sys_user_role)

​ 用户角色表是用来存放用户和角色的对应关系,理论上来说,用户和角色应该是一对一的,但是,在实际的生产环境中,一个用户往往有多个角色,即兼任。

字段备注
user_id用户编号
role_id角色编号

2.6 角色权限表(sys_role_permission)

​ 角色权限表是用来存放角色和权限的对应关系,该表中,角色和权限应该是一对多的关系。

字段备注
role_id角色编号
per_id权限编号

3. 拓展

​ 当然,一个权限系统一定不能只有已上几张表,为了实现菜单的动态化,需要补充三张表,补充后的结构如下:

3.1 菜单表

​ 菜单表是用来存放菜单的基本信息。

字段备注
menu_id菜单编号
menu_name菜单名称
url菜单所指向的地址
type菜单的类型(包括目录、菜单以及按钮)
icon菜单的图表
pid菜单的父id

3.2 角色菜单表

​ 角色菜单表是用来存放角色所拥有的的菜单。

字段备注
role_id角色编号
menu_id菜单编号

3.3 菜单权限表

​ 菜单权限表用来存放菜单的权限。为了能够控制菜单的动态显示、访问,所以给每一个菜单也设计了权限,这样看起来有些臃肿,一种简化方式是将菜单权限表省略,然后在菜单表中添加 permission 字段,代表改菜单所需要的的权限。

字段备注
menu_id菜单编号
per_id权限编号

以上是关于权限设计系统——RBAC的主要内容,如果未能解决你的问题,请参考以下文章

B端产品之权限设计(RBAC权限模型)

后台设计基石:用户权限管理(RBAC)及工作流(workflow)

浅识RBAC

基于SSM框架的RBAC权限系统设计与实现(附源码论文 )

基于SSM框架的RBAC权限系统设计与实现(附源码论文 )

权限设计系统——RBAC