RBAC基本流程实现

article/2025/9/16 7:47:22

RBAC中最重要的一个名词是role角色,项目中每个账号的权限不同,所以看到的东西,可以做的操作是不一样的,所以引入这个是非常有必要的,下面图中是5个表的实现,但是为了方便理解,用户表——角色表省去了,就意味着每个用户只能对应一种角色,是一对一的关系,用主外键实现。在这里插入图片描述
首先,把登录功能实现,因为比较基本,这里不一一赘述,因为用户表中的type是外键,就是角色表中的rid主键,就意味着用户只要登录上去就可以得到用户是什么角色,接下来的工作就是根据角色查出来这个角色在菜单表里面可以有什么操作,这里的菜单表也是权限中的内容。这个SQL语句是个多个操作select * from menu where mid in(select mid from role_menu where rid = #{param1}) and pid = #{param2}
显然这里需要两个参数,一个是角色中的rid,另外一个是pid这是菜单表中的自连接的父id,这里用了二级目录,pid是上级目录的mid(自联查询条件)。下面是接口的具体实现

@Service
public class MenuServiceImpl implements MenuService {@Autowiredprivate MenuMapper menuMapper;@Overridepublic List<Tree> selectTree(int rid, int pid) {List<Menu> menus = menuMapper.selectMenu(rid, pid);List<Tree> list = new ArrayList<>();for (Menu m:menus) {Tree tree = new Tree(m.getMid(),m.getMname(),m.getStatus()==0?"closed":"open",m.getUrl());list.add(tree);}return list;}
}

这里用的SSM框架+easyUI实现,因为前端接收的数据就写死的三个值,所以就用了另外一个实体类Tree来接收Menu类中数据,我这里接收了四个,因为后面要用到。这就是Service层要做的事情,接下来写Controller。

@RestController
@RequestMapping("/MenuController")
public class MenuController {@Autowiredprivate MenuService menuService;@RequestMapping("/findMore")public List<Tree> findMore(@RequestParam(defaultValue = "0") int id, HttpSession httpSession){User user = (User) httpSession.getAttribute("user");return menuService.selectTree(user.getRid(),id);}
}

这里就需要考虑两个参数的问题了,前端只传过来一个id,这个id就是我们需要pid,这是前端框架根据几级目录给我们传的参数,我们直接赋给第二个参数即可,第一个参数的rid我们无法从前面获得,这时候就想到我们登录的时候,就可以把rid确定下来,这时候就用到了session来保存我们已经登录的session对象,把登录的user保存到session中,再在我们这里get到这个session对象, 用这个对象的rid来给我们需要的第一个参数赋值。到这里我们就实现了基于角色的菜单的显示。但是Bug非常多,下面一一解决。
第一:我们这里不登录,直接访问main.jsp是可以访问的,这就需要引入过滤器来实现,这里又要用到那个session对象 ,只要session为null,他访问别的之后,让他调转到登录页面。
第二:用户登录上以后,长时间不操作,sessio失效了,然后用户发送Ajax请求去访问别的页面,也是可以访问的,这明显是不允许的,所以这里就要再次拦截它,回到登录页面。
第三:这样虽然实现了,菜单栏显示的内容不一样,但是当普通用户登录后,而他正好知道管理员的部分的URL,这样也是可以访问的,这里也是不允许的,然后就需要引入另外两张表,URL表和role—url表,URL表也算是权限的一部分,有两个字段组成,一个是uid,一个是uname就是可以访问的路径,因为是多对多的关系,所以引入中间表,下面是mapper的实现,

public interface URLMapper {@Select("select uname from url where uid in (select uid from role_url where rid = #{param1})")List<String> selectURL(int rid);
}

这里的sql语句和上面类似,用户登录以后,就可以拿到rid,这里就需要一个集合来存放这个用户可以登录的那些地址,所以选择了在user实体类中,多了一个list类型的属性,来存放地址们,Usercontroller代码如下

@RestController
@RequestMapping("/UserController")
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate URLService urlService;@RequestMapping("/findUsers")public int findUsers(String zh, String pwd, HttpSession httpSession){User user = userService.findUser(zh, pwd);if (user!=null){//当前登录用户的所有权限,然后在过滤器里面验证是否包含在里面List<String> url = urlService.findURL(user.getRid());user.setURL(url);httpSession.setAttribute("user",user);return 1;}else {return 0;}}
}

http://chatgpt.dhexx.cn/article/WrYVwxw4.shtml

相关文章

RBAC用户权限管理数据库设计

RBAC&#xff08;Role-Based Access Control&#xff0c;基于角色的访问控制&#xff09;&#xff0c;就是用户通过角色与权限进行关联。简单地说&#xff0c;一个用户拥有若干角色&#xff0c;每一个角色拥有若干权限。这样&#xff0c;就构造成“用户-角色-权限”的授权模型。…

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

一、RBAC基础知识 1、RBAC的组成&#xff1a; 1&#xff1a;由3个基础的部分组成&#xff1a;用户、角色和权限&#xff1b; 2&#xff1a;RBAC通过定义角色的权限&#xff0c;并对用户授予某个角色从而来控制用户的权限&#xff0c;实现了用户和权限的逻辑分离&#xff0c;极大…

RBAC权限设计详解

权限设置 1.权限点 权限:在一个系统内是否具有做某个操作的权利权限分为两个级别 1. 菜单权限:是否有权限访问某个菜单 2.按钮权限:是否有权限操作 页面上的某个按钮功能 2.业务逻辑 对于权限数据来说,有两个级别的设置 1.能不能访问谋个页面 2.在页面上,能不能操作某个按…

RBAC 模型是什么?

RBAC 模型是什么? 美国国家标准与技术研究院&#xff08;The National Institute of Standards and Technology&#xff09;认为 RBAC 模型由 4 个基础模型组成&#xff1a; 1. 基本模型 RBAC0&#xff08;Core RBAC&#xff09;2. 角色分层模型 RBAC1&#xff08;Hierarcha…

什么是RBAC?

什么是RBAC&#xff1f; 全称&#xff1a;role-based access control 基于角色的权限访问控制 作用&#xff1a;实现访问控制 RBAC模型概括 RBAC权限授权的过程可以概括为&#xff1a;W是否可以对Z进行H的访问操作&#xff0c;并对这个逻辑表达式进行判断是否为true的过程&…

RBAC(一)

介绍 RBAC(基于角色的权限控制&#xff0c;role base access control)是一种设计模式&#xff0c;用于设计和管理权限相关数据的一种模型。 RBAC认为权限授权的过程可以抽象地概括为&#xff1a;Who是否可以对What进行How的访问操作&#xff0c;并对这个逻辑表达式进行判断是否…

RBAC浅谈(一)RBAC的基本概念

1.概念 RBAC即Role Based Access Control&#xff0c;意为基于角色的访问控制。用户与角色相关联&#xff0c;当用户在系统进行注册时可以选择成为某一角色从而拥有这个角色的权限&#xff0c;当然新注册的用户的权限也可以由上一级用户授予如管理员认定某个用户为某个角色就授…

RBAC权限详解

RBAC权限详解 权限设置 1.权限点 权限:在一个系统内是否具有做某个操作的权利 权限分为两个级别 1. 菜单权限:是否有权限访问某个菜单2. 按钮权限:是否有权限操作 页面上的某个按钮功能2.业务逻辑 对于权限数据来说,有两个级别的设置 1.能不能访问谋个页面 2.在页面上,能…

Rbac权限管理--如何设计

RBAC&#xff08;Role-Based Access Control&#xff0c;基于角色的访问控制&#xff09;&#xff0c;就是用户通过角色与权限进行关联。简单地说&#xff0c;一个用户拥有若干角色&#xff0c;每一个角色拥有若干权限。这样&#xff0c;就构造成“用户-角色-权限-资源”的授权…

六,RBAC简介

六&#xff0c;RBAC RBAC&#xff08;基于角色的权限控制 role base access control&#xff09;是一种设计模式&#xff0c;是用来设计和管理权限相关数据的一种模型 RBAC权限数据的管理&#xff0c;都是重复的CRUD的操作&#xff0c;这里我们就不再重复的从0到1开发&#xf…

RBAC简介

目录 RBAC简介RBAC0RBAC1RBAC2RBAC3 RBAC简介 RBAC是Role Based Access Control的英文缩写&#xff0c;意思是基于角色访问控制。 RBAC实际上就是针对产品去发掘需求时所用到的Who&#xff08;角色&#xff09;、What&#xff08;拥有什么资源&#xff09;、How&#xff08;有…

RBAC 权限

RBAC权限分析 RBAC 全称为基于角色的权限控制&#xff0c;本段将会从什么是RBAC&#xff0c;模型分类&#xff0c;什么是权限&#xff0c;用户组的使用&#xff0c;实例分析等几个方面阐述RBAC 什么是RBAC RBAC 全称为用户角色权限控制&#xff0c;通过角色关联用户&#xff…

RBAC模型

最近开始在找java项目&#xff0c;大部分时间都是跟着视频或者代码一步一步敲过来&#xff0c;但是对代码的理论层面还是有所欠缺&#xff0c;今天就来分享一个系统设计中的一个模型。不管是哪一个系统&#xff0c;都绕不开权限控制&#xff0c;因为现在的角色太多了&#xff0…

RBAC入门教程及实例演示

RBAC 一、RBAC的作用 在很多系统中&#xff0c;会要求不同的账户对应着不同的角色和权限。如教务管理系统&#xff0c;分为以下几种功能&#xff0c;不同的功能对应着不同的角色 如果要做到登录后根据账户的角色&#xff0c;给出相应的菜单&#xff0c;及规定当前角色只能做出…

RBAC简介(*)

一.RBAC是什么 1.RBAC模型概述 RBAC是Role Based Access Control的英文缩写&#xff0c;意思是 基于角色的访问控制。 RBAC实际上就是针对产品去挖掘需求时所用到的Who&#xff08;角色&#xff09;、What&#xff08;拥有什么资源&#xff09;、How&#xff08;有哪些操作&am…

什么是 RBAC 模型?

前言 RBAC&#xff08;Role-Based Access Control&#xff09;&#xff0c;基于角色的访问控制&#xff0c;现在主流的权限管理系统的权限设计都是 RBAC 模型&#xff0c;或者是 RBAC 模型的变形。 我们需要思考一个问题&#xff1a;为什么要做权限的管理&#xff1f; 我的理…

RBAC权限管理(详细)

RBAC权限设计思想 为了达成不同账号(员工、总裁)登录系统后看到不同页面&#xff0c;执行不同功能&#xff0c;RBAC(Role-Based Access control)权限模型&#xff0c;就是根据角色的权限&#xff0c;分配可视页面。 三个关键点: 用户:使用系统的人 角色&#xff1a;使用系统…

什么是RBAC

一、RBAC是什么 1、RBAC模型概述 RBAC模型&#xff08;Role-Based Access Control&#xff1a;基于角色的访问控制&#xff09;模型是20世纪90年代研究出来的一种新模型&#xff0c;但其实在20世纪70年代的多用户计算时期&#xff0c;这种思想就已经被提出来&#xff0c;直到…

最小生成树,秒懂!

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447; 作者丨bigsai 来源丨bigsai 前言 在数据结构与算法的图论中&#xff0c;(生成)最小生成树算法是一种常用并且和生活贴切比较近的一种算法。但是可能很多人对概念不是…

算法 - 最小生成树实现

算法能力是一个门槛&#xff0c;也是个有基础的门槛 无论你是iOS工程师&#xff0c;android工程师&#xff0c;java工程师&#xff0c;前端&#xff0c;后端还是全栈等等… 算法能力的强弱一方面在于思想&#xff0c;你是否有计算机思维抽象具体问题的能力 更重要的还在与基…