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

第一节.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地址是否一致。
如果一致则放行,不一致则拦截,并提示其权限不足。
过滤器代码示例:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

子列表只是原列表的一个视图

原文参考:《编写高质量代码:改善java程序的151个建议》本文原创:穆雄雄上期文章:subList?? subString???上期我们说到,List接口提供了subList方法,其作用是返回一个列表的子列表。并且我们通过案例说明…

python注释的用法(单and多行)

单行注释 # name"asdfdasfdas"多行注释 """ print(xy) aad2"""快捷键 先选中要注释的内容然后Ctrl/

【2018.3.17】模拟赛之二-ssl1862jzoj1366 删数【区间dp】

正题 链接 需要纪中OJ账号 有n个数,可以选择删除一段区间,价值为|xi – xk|*(k-i1)。求删完所有数的最大价值 输入输出(需要自取) Input    输入文件的第一行为一个正整数N,第二行有N个用空格隔开的N个不同的正整…

ASP.NET Core之跨平台的实时性能监控

前言 前面我们聊了一下一个应用程序 应该监控的8个关键位置. 应用程序的8个关键性能指标以及测量方法 最后卖了个小关子,是关于如何监控ASP.NET Core的. 今天我们就来讲讲如何监控它,下面上效果图: 阅读本文需要了解的相关技术与内容: InfluxDb(分布式时序数据库,开源)(注…

EasyUI(前端框架)

第一节 EasyUI的介绍和常用组件 [1]EasyUI的介绍 介绍: EasyUI是一个前端开发的框架,其将常用的页面开发使用的组件进行了 封装,前端开发人员只需将EasyUI的资源导入项目后使用即可,快速 提升开发效率。 使用: ① 导入EasyUI的资…

如何快速开发一个 Dubbo 应用

转载自 如何快速开发一个 Dubbo 应用 导读:在分布式系统中,远程调用是最基础也是最重要的基石。历史上,曾经先后出现过 CORBA、RMI、EJB、WebService 等技术和规范,在服务化以及微服务日趋流行的今天,更多的被广泛使…

‘小会计’的转行之旅

本文原创:王哈哈1大学学习的专业是会计学,目前社会上来说很普遍的工作,都说会计是越老越吃香,所以一毕业就先找了一份和专业相关的工作,然后就开始了抱着公司的大腿努力工作。毕业三年期间也换了几份工作,本…

【2018.3.17】模拟赛之三-ssl1863jzoj1367 俄罗斯方块【模拟】

正题 链接 需要纪中OJ账号 有7种方块 有n列,给出每列的方块高度,求一种方块所有方面都落地的方案数 输入输出(需要自取) Input 第一行为二个整数C和P,1 ≤ C ≤ 100, 1 ≤ P ≤ 7,表示列数和下落方…

Python缩进的几个原则

Python的缩进有以下几个原则 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进 同一级别的代码,缩进必须一致 官方建议缩进用4个空格

应用程序的8个关键性能指标以及测量方法

前言 高性能一直是我们作为程序员..孜孜不倦的追求.. 有的时候甚至会为了一句代码吵上几天.. 那么到底应该如何评估我们的性能指标来判断是否需要优化呢? 今天就来讲一下这个.. 说明一下,本篇是译文. 原文地址:https://stackify.com/application-performance-metrics/ …

MyBatis Plus

文章目录第一节 MyBatis Plus 的简介第二节 MyBatis Plus 的框架搭建[1] 第一步:导包[2] 搭建SSM开发环境[3] 在数据库中创建测试表[4] 在pojo层下创建Student表的实体类[5] 在mapper层创建StudentMapper接口并继承BaseMapper接口[6] 创建测试类,并从Spr…

班级日常分享,一天一瞬间

119级日常分享经过两周左右的KTV项目终于要告一段落了,上午先让各个小组在班内试讲了下自己小组所做的KTV点歌系统,整体上做的还可以,有些小组还存在一些细节问题,在试讲的时候也都给他们指了指,相信下来会有所改进的。…

DDOS 攻击的防范教程

转载自 DDOS 攻击的防范教程 一个多月前,阮一峰的个人网站遭受 DDOS 攻击,下线了50多个小时。这篇文章就是他总结的,教大家如何应对这种攻击。 需要说明的是,我对 DDOS 并不精通,从没想过自己会成为攻击目标。攻击…

【2018.3.17】模拟赛之四-ssl1864jzoj1368 燃烧木棒【最短路,Floyd】

正题 链接 需要纪中OJ账号 有n条木棒,长度为1或根号2,给出每根木棒两头的坐标,和燃烧需要的时间。只能从一个木棒的一头开始点火,求燃烧完所有木棒所需要的最短时间。 输入输出(需要自取) Input 输入…

python变量的创建过程(内存地址变化)

​ name “Alex” 原因 python 解释器有自动垃圾回收机制,自动隔一段时间把没有跟变量名关联的内存数据回收。

推荐一份基于Docker的DevOps实战培训教程

01. 基于Docker的DevOps实战培训 微软工具链 基于Azure和Team Foundation Server 微软DevOps工具链是基于Visual Studio 应用生命周期管理(VSALM - Visual Studio Application Lifecycle Managemnet)的软件管理平台,本动手实验希望通过模拟一…

所有和Java中代理有关的知识点都在这了

转载自 所有和Java中代理有关的知识点都在这了 对于每一个Java开发来说,代理这个词或多或少都会听说过。你可能听到过的有代理模式、动态代理、反向代理等。那么,到底什么是代理,这么多代理又有什么区别呢。本文就来简要分析一下。 代理技…

神奇!一行代码实现删除某集合下标20-30的元素

大家好,我是雄雄。今天我们还是分享关于集合的内容。假如有这样的需求,已知集合的长度为100,也就是集合中有100个元素,现需要删除索引20-30之间的元素,我们应该怎么实现呢?我们先初始化集合,代码…

ssl初一组周六模拟赛【2018.3.17】

前言 先说一下成绩: 姓名成绩xjq(没错又是他)310hjq200hzb150wyc(本人)130lrz130xxy100lw30zyc缺考 正题 题目1:ssl2574 & jzoj1368 无限序列【斐波那契数列】 刚开始想用分治,结果做不出来,然后想到了更好的方法&#xff…

注意!在subList生成子列表之后,一定不要随便更改原列表

大家好,我是雄雄。前几期我们说过,subList方法是返回原列表的子列表,并且我们还说过,在subList返回的子列表上操作时,会直接影响着原列表,原文在这里:subList?? subString???子列表只是原列…