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 错误→前端提示无权限。

相关推荐
AC赳赳老秦41 分钟前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
AI多Agent协作实战派1 小时前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit1 小时前
Java+Ai+vue
java·spring·maven
qq_2518364571 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
野生风长1 小时前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++
LayZhangStrive1 小时前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
未秃头的程序猿1 小时前
给公司做了个AI客服Agent,用的Spring AI 1.0,3天上线领导拍板了
java·后端·ai编程
曹牧1 小时前
Eclipse 批量文本替换
java·ide·eclipse
FoldWinCard1 小时前
D6 Python 基础语法 --- 保留关键字
开发语言·python
程序员清风2 小时前
OpenAI官方发布最新提示词技巧!
java·后端·面试