Jeecgboot框架-权限控制

Jeecgboot 的权限体系核心为按钮权限(功能权限)+ 数据权限,基于 Shiro 实现权限校验,遵循「用户 - 角色 - 权限」的关联逻辑(用户关联角色、角色绑定权限,权限不直接分配给用户),所有权限配置最终通过系统端配置 + 前后端代码注解 / 校验联动生效。

一、前期准备工作:

  1. 创建学生角色
  2. 创建学生用户:账号为学生的学号
  3. 为学生用户分配学生角色

二、数据权限配置(行级数据过滤,学生仅看自己的成绩):

核心实现:系统配置数据规则 + 后端加注解触发过滤,让 Jeecgboot 动态拼接 SQL 的 where 条件,实现 "学生只能查看自己的成绩数据"。

(一)系统端配置(菜单 + 数据规则 + 角色授权)

  1. 添加下级权限按钮:菜单管理下,成绩管理添加下级(查看学生列表按钮/权限)
  2. 配置数据规则:给成绩管理添加数据规则:StudentNo 等于 当前登录用户账号
  3. 学生角色授权:学生角色只能访问成绩管理-查看成绩列表的权限,并保存数据规则

(二)后端代码配置

核心注解:@PermissionData,作用是触发 Jeecgboot 的动态数据权限拦截器,对请求进行数据过滤,仅需加在查询类方法上(列表查询 / 分页查询)。

  • 注解位置:在 Controller 层对应「查看学生列表」的方法(如list/queryPage)上添加注解,类上添加则该类所有方法生效;
  • 核心参数:pageComponent值必须和菜单管理中「查看学生列表」的「组件路径」完全一致(大小写敏感);

(三)数据权限核心原理

用户访问查看列表接口→@PermissionData注解触发拦截器→根据pageComponent匹配对应菜单→获取该菜单的数据规则→动态拼接 SQL 的 where 条件(StudentNo = 登录用户账号)→拦截 MyBatis 查询操作→执行过滤后的数据库查询→返回仅当前用户可见的数据。

三、按钮权限配置(功能权限,精细化控制增删改等操作)

按钮权限是功能级别的权限校验,核心实现:系统配置按钮权限标识 + 后端注解做接口校验 + 前端判断做界面控制,实现 "管理员可操作增删改,学生无任何操作权限"。

(一)系统端配置(菜单按钮 + 角色授权)

  1. 添加操作按钮权限:菜单管理-成绩管理添加下级:增删改导入导出按钮权限(访问路径和授权标识)
  2. 管理员角色授权

(二)后端代码配置:

核心注解:@RequiresPermissions(Shiro 原生注解,Jeecgboot 集成),作用是校验当前登录用户的角色是否拥有该权限标识,无权限则直接返回 403 错误,仅需加在操作类 Controller 方法上。

(三)前端配置(界面控制,按钮显隐)

在 GradeList.vue 中添加权限判断,确保只有拥有相应权限的用户才能看到操作按钮:

导入usePermission函数:import { usePermission } from '/@/hooks/web/usePermission';

添加权限判断变量:const { hasPermission } = usePermission();

函数方式:

  • 新增按钮: v-if="hasPermission('school:grade:add')"
  • 编辑按钮: v-if="hasPermission('school:grade:edit')"
  • 删除按钮: v-if="hasPermission('school:grade:delete')"

四、权限生效完整流程梳理

(一)数据权限生效流程

用户登录→前端访问「查看学生列表」接口→后端 Controller 触发@PermissionData注解→Jeecgboot 权限拦截器根据pageComponent匹配对应菜单→获取菜单的数规则(StudentNo=登录用户账号)→动态拼接 SQL 查询条件→MyBatis 执行过滤查询→返回仅当前用户可见的成绩数据→前端渲染列表。

(二)按钮权限生效流程

用户登录→后端查询该用户角色的所有权限标识→返回并缓存至前端 Store→页面渲染时,hasPermission/v-hasPermi校验权限标识→控制按钮显 / 隐→用户点击按钮→前端调用对应接口→后@RequiresPermissions校验权限标识→校验通过执行方法,校验失败返回 403 错误→前端提示无权限。

相关推荐
Ai runner1 小时前
Show call stack in perfetto from json input
java·前端·json
I_LPL2 小时前
day36 代码随想录算法训练营 动态规划专题4
java·算法·leetcode·动态规划·hot100
Mr YiRan2 小时前
C++二义性,多态,纯虚函数和模版函数
java·jvm·c++
江西理工大学小杨2 小时前
高性能 C++ 社交平台1:微服务架构设计
开发语言·c++·微服务
lihao lihao2 小时前
接口自动化测试—request模块
开发语言·python
升讯威在线客服系统2 小时前
从 GC 抖动到稳定低延迟:在升讯威客服系统中实践 Span 与 Memory 的高性能优化
java·javascript·python·算法·性能优化·php·swift
Coisinilove2 小时前
MATLAB微分方程求解
开发语言·matlab·微分方程
weixin_449310842 小时前
使用轻易云平台实现数据ETL转换与写入金蝶云星辰V2
java·数据仓库·etl
Seven972 小时前
剑指offer-77、打印从1到最⼤的n位数
java