第一节.RBAC简介
- 英文全称(Role-Based Access Control)
- 中文全称:基于角色的权限访问控制
- rbac: 一种数据库设计思想,根据设计数据库设计方案,完成项目的权限控制.
- 经常需要添加权限的情景
4.1 不同用户登录后看到的菜单是不一样的.
4.2 不同用户看到的页面效果不一样
4.2.1 有的用户可以看见”授权”按钮,或有的用户可以看见”删除”按钮
4.3 不同用户完成的功能是不一样的.
4.3.1 有的用户可以执行删除,有的可以执行新增.
- 学习RBAC需要掌握的两项
5.1 如何设计数据库中表
5.2 如何根据数据库完成项目
- RBAC核心是角色,在数据库设计时一定有角色表.其他的表是根据具体需求看是否添加.
6.1 根据RBAC设计思想,设计出来的方案是非常灵活的.
第二节.传统项目数据库设计方案
[1] 数据库原型及其问题.
[2] 根据上面数据库表设计方案带来的问题:
2.1 新建一个用户时:
2.1.1 在用户表中添加一条数据.
2.1.2 在关联表中添加N条数据
2.1.3 每次新建一个用户需要添加:1+N(关联几个)条数据
第三节.RBAC设计方案(简单版)
- 解决传统项目设计方案中创建用户时教繁琐的操作.
- 基于RBAC的设计方案
2.1 设定好在某些情况下哪些菜单需要被关联:
2.1.1 例如:管理员可以看到所有菜单
2.1.2 例如:销售总监可以看到”销售管理”菜单.
2.1.3 例如:普通员工只能看见系统公告中公告查看
2.2 现实生活中的职位对应1个或多个数据库中的角色.
- 在系统上线后,会在程序中添加几种比较常见的角色.并把菜单和角色关联.
3.1 以后每次新建用户时
3.1 在用户表中添加一个数据
3.2 在用户和角色关联表中添加1条或n条数据.
- 画图说明RBAC:
第四节. RBAC 的代码示例:
需求:
使用RBAC数据库设计思想,完成不同的用户登录
系统后显示不同的菜单。
要求:
用户:张三和李四
菜单:
用户管理
用户查询
增加用户
班级管理
班级查询
增加班级
查看通告
系统设置
- 数据库设计
数据库Sql语句
- 代码效果实现
main.jsp主页面的代码示例
MenuController的代码示例
MenuServiceImpl的代码示例
MenuMapper的代码示例
- 运行截图
第五节.RBAC 详细版本
- 数据库设计
1.1 权限表:平时小型项目中可以省略.
1.2 用户组表:对用户进行分组,每个用户组绑定多个角色,把用户放入到用户组后,具有对应多个角色.
1.3 角色组:角色组对应多个角色,用户组和角色组
1.4 完成访问控制时,需要对什么类型表进行访问控制(在简单版中)把需要控制的内容和角色进行直接关联.
1.4.1 详细版中是跟权限进行关联.
第六节.URL权限控制
- 作用:访问通过URL非法操作
1.1 例如:在浏览器中直接通过URL访问控制器.
- 区分开:和页面元素可见权限.
2.1 页面元素可见: 在页面能不能看到某些内容
2.2 URL权限指:在浏览器地址栏直接访问
- 实现思想(基于简单版):
3.1 添加URL表.
3.2 URL表和角色表进行关联.
3.3 在filter或拦截器中添加权限验证.
- 代码实现示例
4.1 数据库设计
i. 在当前rbac案例中新增一张url权限信息表
表名:t_url
作用:存储需要被管理的url地址信息。
字段:编号,url地址
ii. 在当前rbac案例中新增一张角色和url权限表的关联表
表名:r_url
作用:表名url和角色之间的关联关系
字段:角色ID,url的编号
iii. Sql语句示例:
4.2 代码实现
实现思路:
在项目增加过滤器,在过滤器中判断当前请求的
url地址和用户具备的操作的URL地址是否一致。
如果一致则放行,不一致则拦截,并提示其权限不足。
过滤器代码示例: