当前位置: 代码迷 >> 综合 >> 权限设计系统——RBAC
  详细解决方案

权限设计系统——RBAC

热度:64   发布时间:2024-02-13 07:53:39.0

权限设计系统——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 权限编号