一、前言在若依框架中权限分为菜单接口权限和数据权限。菜单权限控制能看到哪些功能、访问哪些接口数据权限控制同一张数据表不同角色用户能看到哪些行数据。本次实战搭建车间设备管理模块实现需求超级管理员查看全部车间设备数据普通角色用户只能查看本部门 / 本车间设备数据核心技术DataScope注解 AOP 切面 MyBatis 动态 SQL 拼接二、核心原理若依内置DataScopeAspect切面类拦截DataScope注解自动获取当前登录用户所属部门、角色数据权限动态拼接 SQL 过滤条件存入实体类params参数Mapper XML 通过${params.dataScope}引入动态条件实现行级过滤内置 5 种数据权限全部、自定义、本部门、本部门及以下、仅本人三、数据库准备CMD 终端操作1. CMD 登录 MySQLbash运行mysql -uroot -p输入密码登录选择若依数据库sqluse ry-vue;2. 创建设备表sqlCREATE TABLE sys_equipment ( equip_id BIGINT NOT NULL AUTO_INCREMENT COMMENT 设备ID, equip_name VARCHAR(100) NOT NULL COMMENT 设备名称, equip_no VARCHAR(50) DEFAULT NULL COMMENT 设备编号, dept_id BIGINT NOT NULL COMMENT 所属车间部门ID, user_id BIGINT DEFAULT NULL COMMENT 负责人ID, status CHAR(1) DEFAULT 0 COMMENT 状态0正常 1停用, create_time DATETIME DEFAULT NULL COMMENT 创建时间, PRIMARY KEY (equip_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT车间设备表;3. 插入测试设备数据sqlINSERT INTO sys_equipment (equip_name, equip_no, dept_id, user_id) VALUES (LatheA, Li_001, 103, 2), (MillingB, Li_002, 103, 3), (DrillC, Li_003, 104, 2);4. 导入菜单 SQL解压代码生成包在 CMD 执行菜单脚本sqlsource D:/edgdownload/w13/equipmentMenu.sql;四、若依代码生成登录若依后台 → 系统工具 → 代码生成导入sys_equipment表配置模块名equipment功能名设备管理上级菜单系统管理生成代码并下载压缩包解压得到后端、前端、SQL 文件五、项目代码部署1. 后端代码复制将controller/domain/mapper/service对应文件复制到项目对应包下将SysEquipmentMapper.xml复制到mapper/system目录2. 前端代码复制equipment.js复制到ruoyi-ui/src/apiequipment文件夹复制到ruoyi-ui/src/views六、数据权限核心改造三步必做1. 实体类继承 BaseEntity自动生成的SysEquipment已默认继承无需修改核心作用携带params参数存放动态 SQL。2. Service 层添加 DataScope 注解修改SysEquipmentServiceImpl.java导入注解并添加到查询列表方法java运行import com.ruoyi.common.annotation.DataScope; Override DataScope(deptAlias d, userAlias s) public ListSysEquipment selectSysEquipmentList(SysEquipment sysEquipment) { return sysEquipmentMapper.selectSysEquipmentList(sysEquipment); }deptAlias d部门表别名userAlias s设备表别名3. Mapper XML 改造关联部门表末尾加入${params.dataScope}接收动态权限 SQLxmlselect idselectSysEquipmentList parameterTypeSysEquipment resultMapSysEquipmentResult select s.* from sys_equipment s left join sys_dept d on s.dept_id d.dept_id where if testequipName ! null and equipName ! and equip_name like concat(%, #{equipName}, %) /if if teststatus ! null and status ! and status #{status} /if ${params.dataScope} /where /select七、角色与数据权限配置系统管理 → 角色管理超级管理员设置全部数据权限新建普通角色设置本部门数据权限新建测试用户归属对应部门绑定普通角色给角色分配设备管理菜单权限刷新菜单八、功能测试admin 账号登录设备管理查看所有 3 条设备数据普通部门用户登录后仅展示本车间设备自动过滤其他部门数据查看后端日志可看到框架自动拼接AND d.dept_id 部门ID权限条件九、5 种数据权限 SQL 解析全部数据权限不拼接任何 SQL查询全量数据本部门数据权限拼接AND d.dept_id 当前用户部门ID本部门及以下拼接部门及子部门 ID 集合查询仅本人数据权限拼接AND s.user_id 当前用户ID自定义数据权限拼接勾选的部门 ID 集合十、截图可以新建修改设备没开权限之前普通角色看不到设备管理菜单开了就可以。 不同角色因为权限不同看到的设备数量信息不同。
若依 RuoYi-Vue 自定义车间设备模块 + 数据权限完整实现教程
一、前言在若依框架中权限分为菜单接口权限和数据权限。菜单权限控制能看到哪些功能、访问哪些接口数据权限控制同一张数据表不同角色用户能看到哪些行数据。本次实战搭建车间设备管理模块实现需求超级管理员查看全部车间设备数据普通角色用户只能查看本部门 / 本车间设备数据核心技术DataScope注解 AOP 切面 MyBatis 动态 SQL 拼接二、核心原理若依内置DataScopeAspect切面类拦截DataScope注解自动获取当前登录用户所属部门、角色数据权限动态拼接 SQL 过滤条件存入实体类params参数Mapper XML 通过${params.dataScope}引入动态条件实现行级过滤内置 5 种数据权限全部、自定义、本部门、本部门及以下、仅本人三、数据库准备CMD 终端操作1. CMD 登录 MySQLbash运行mysql -uroot -p输入密码登录选择若依数据库sqluse ry-vue;2. 创建设备表sqlCREATE TABLE sys_equipment ( equip_id BIGINT NOT NULL AUTO_INCREMENT COMMENT 设备ID, equip_name VARCHAR(100) NOT NULL COMMENT 设备名称, equip_no VARCHAR(50) DEFAULT NULL COMMENT 设备编号, dept_id BIGINT NOT NULL COMMENT 所属车间部门ID, user_id BIGINT DEFAULT NULL COMMENT 负责人ID, status CHAR(1) DEFAULT 0 COMMENT 状态0正常 1停用, create_time DATETIME DEFAULT NULL COMMENT 创建时间, PRIMARY KEY (equip_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT车间设备表;3. 插入测试设备数据sqlINSERT INTO sys_equipment (equip_name, equip_no, dept_id, user_id) VALUES (LatheA, Li_001, 103, 2), (MillingB, Li_002, 103, 3), (DrillC, Li_003, 104, 2);4. 导入菜单 SQL解压代码生成包在 CMD 执行菜单脚本sqlsource D:/edgdownload/w13/equipmentMenu.sql;四、若依代码生成登录若依后台 → 系统工具 → 代码生成导入sys_equipment表配置模块名equipment功能名设备管理上级菜单系统管理生成代码并下载压缩包解压得到后端、前端、SQL 文件五、项目代码部署1. 后端代码复制将controller/domain/mapper/service对应文件复制到项目对应包下将SysEquipmentMapper.xml复制到mapper/system目录2. 前端代码复制equipment.js复制到ruoyi-ui/src/apiequipment文件夹复制到ruoyi-ui/src/views六、数据权限核心改造三步必做1. 实体类继承 BaseEntity自动生成的SysEquipment已默认继承无需修改核心作用携带params参数存放动态 SQL。2. Service 层添加 DataScope 注解修改SysEquipmentServiceImpl.java导入注解并添加到查询列表方法java运行import com.ruoyi.common.annotation.DataScope; Override DataScope(deptAlias d, userAlias s) public ListSysEquipment selectSysEquipmentList(SysEquipment sysEquipment) { return sysEquipmentMapper.selectSysEquipmentList(sysEquipment); }deptAlias d部门表别名userAlias s设备表别名3. Mapper XML 改造关联部门表末尾加入${params.dataScope}接收动态权限 SQLxmlselect idselectSysEquipmentList parameterTypeSysEquipment resultMapSysEquipmentResult select s.* from sys_equipment s left join sys_dept d on s.dept_id d.dept_id where if testequipName ! null and equipName ! and equip_name like concat(%, #{equipName}, %) /if if teststatus ! null and status ! and status #{status} /if ${params.dataScope} /where /select七、角色与数据权限配置系统管理 → 角色管理超级管理员设置全部数据权限新建普通角色设置本部门数据权限新建测试用户归属对应部门绑定普通角色给角色分配设备管理菜单权限刷新菜单八、功能测试admin 账号登录设备管理查看所有 3 条设备数据普通部门用户登录后仅展示本车间设备自动过滤其他部门数据查看后端日志可看到框架自动拼接AND d.dept_id 部门ID权限条件九、5 种数据权限 SQL 解析全部数据权限不拼接任何 SQL查询全量数据本部门数据权限拼接AND d.dept_id 当前用户部门ID本部门及以下拼接部门及子部门 ID 集合查询仅本人数据权限拼接AND s.user_id 当前用户ID自定义数据权限拼接勾选的部门 ID 集合十、截图可以新建修改设备没开权限之前普通角色看不到设备管理菜单开了就可以。 不同角色因为权限不同看到的设备数量信息不同。