当前位置: 代码迷 >> 综合 >> RBAC(基于角色的权限访问控制)
  详细解决方案

RBAC(基于角色的权限访问控制)

热度:73   发布时间:2023-11-27 22:57:31.0

第一节.RBAC简介

  1. 英文全称(Role-Based Access Control)
  2. 中文全称:基于角色的权限访问控制
  3. rbac: 一种数据库设计思想,根据设计数据库设计方案,完成项目的权限控制.
  4. 经常需要添加权限的情景

4.1 不同用户登录后看到的菜单是不一样的.
4.2 不同用户看到的页面效果不一样
4.2.1 有的用户可以看见”授权”按钮,或有的用户可以看见”删除”按钮
4.3 不同用户完成的功能是不一样的.
4.3.1 有的用户可以执行删除,有的可以执行新增.

  1. 学习RBAC需要掌握的两项

5.1 如何设计数据库中表
5.2 如何根据数据库完成项目

  1. RBAC核心是角色,在数据库设计时一定有角色表.其他的表是根据具体需求看是否添加.

6.1 根据RBAC设计思想,设计出来的方案是非常灵活的.

第二节.传统项目数据库设计方案

[1] 数据库原型及其问题.
在这里插入图片描述

[2] 根据上面数据库表设计方案带来的问题:

2.1 新建一个用户时:
2.1.1 在用户表中添加一条数据.
2.1.2 在关联表中添加N条数据
2.1.3 每次新建一个用户需要添加:1+N(关联几个)条数据

第三节.RBAC设计方案(简单版)

  1. 解决传统项目设计方案中创建用户时教繁琐的操作.
  2. 基于RBAC的设计方案

2.1 设定好在某些情况下哪些菜单需要被关联:
2.1.1 例如:管理员可以看到所有菜单
2.1.2 例如:销售总监可以看到”销售管理”菜单.
2.1.3 例如:普通员工只能看见系统公告中公告查看
2.2 现实生活中的职位对应1个或多个数据库中的角色.

  1. 在系统上线后,会在程序中添加几种比较常见的角色.并把菜单和角色关联.

3.1 以后每次新建用户时
3.1 在用户表中添加一个数据
3.2 在用户和角色关联表中添加1条或n条数据.

  1. 画图说明RBAC:
    在这里插入图片描述

第四节. RBAC 的代码示例:

需求:

使用RBAC数据库设计思想,完成不同的用户登录
系统后显示不同的菜单。

要求:

用户:张三和李四
菜单:
用户管理
用户查询
增加用户
班级管理
班级查询
增加班级
查看通告
系统设置

  1. 数据库设计

用户信息表:t_user字段中文名称	字段名称	字段类型	字段长度	字段约束用户ID	uid	int	10	主键,自增用户姓名	uname	varchar	100	非空用户名密码	pwd	varchar	20	非空角色ID	rid	int	10	非空

角色信息表:t_role字段中文名称	字段名称	字段类型	字段长度	字段约束角色ID	rid	int	10	主键,自增角色名称	rname	varchar	100	非空角色描述	rdesc	varchar	300

角色菜单信息表:r_menu字段中文名称	字段名称	字段类型	字段长度	字段约束角色ID	rid	int	10	非空菜单ID	mid	int	10	非空

菜单信息表:t_menu字段中文名称	字段名称	字段类型	字段长度	字段约束菜单ID	mid	int	10	主键,自增菜单名称	mname	varchar	100	非空菜单的URL	murl	varchar	200	菜单的层级	parentid	int	10	非空菜单的描述	mdesc	varchar	200

数据库Sql语句
在这里插入图片描述

  1. 代码效果实现
    main.jsp主页面的代码示例
    在这里插入图片描述

在这里插入图片描述

MenuController的代码示例
在这里插入图片描述

MenuServiceImpl的代码示例
在这里插入图片描述

MenuMapper的代码示例
在这里插入图片描述

  1. 运行截图
    在这里插入图片描述
    在这里插入图片描述

第五节.RBAC 详细版本

  1. 数据库设计

1.1 权限表:平时小型项目中可以省略.
1.2 用户组表:对用户进行分组,每个用户组绑定多个角色,把用户放入到用户组后,具有对应多个角色.
1.3 角色组:角色组对应多个角色,用户组和角色组
1.4 完成访问控制时,需要对什么类型表进行访问控制(在简单版中)把需要控制的内容和角色进行直接关联.
1.4.1 详细版中是跟权限进行关联.
在这里插入图片描述

第六节.URL权限控制

  1. 作用:访问通过URL非法操作

1.1 例如:在浏览器中直接通过URL访问控制器.

  1. 区分开:和页面元素可见权限.

2.1 页面元素可见: 在页面能不能看到某些内容
2.2 URL权限指:在浏览器地址栏直接访问

  1. 实现思想(基于简单版):

3.1 添加URL表.
3.2 URL表和角色表进行关联.
3.3 在filter或拦截器中添加权限验证.

  1. 代码实现示例

4.1 数据库设计
i. 在当前rbac案例中新增一张url权限信息表
表名:t_url
作用:存储需要被管理的url地址信息。
字段:编号,url地址
ii. 在当前rbac案例中新增一张角色和url权限表的关联表
表名:r_url
作用:表名url和角色之间的关联关系
字段:角色ID,url的编号
iii. Sql语句示例:
在这里插入图片描述
4.2 代码实现
实现思路:
在项目增加过滤器,在过滤器中判断当前请求的
url地址和用户具备的操作的URL地址是否一致。
如果一致则放行,不一致则拦截,并提示其权限不足。
过滤器代码示例:
在这里插入图片描述