前言在企业级系统开发中数据权限是比菜单权限更核心的安全控制能力。简单来说菜单权限控制“能不能进这个页面”数据权限控制“进了页面后能看到哪些具体数据”本文基于若依RuoYi框架带领大家从零实现一个车间设备数据按部门隔离的功能。最终效果是不同部门的用户登录系统后只能查看本部门的设备数据而超级管理员可以查看全部设备数据。一、需求分析功能车间设备管理支持列表查询、数据权限过滤权限规则普通用户仅查看本部门设备超级管理员查看全部设备设备号固定为sxy_001技术若依框架 MySQL MyBatis AOP 数据权限二、数据库表设计创建车间设备表 sys_device字段包含设备编号、温度、所属部门、删除标志等。CREATE TABLE sys_device ( id bigint NOT NULL AUTO_INCREMENT COMMENT 记录编号, device_code varchar(64) NOT NULL COMMENT 设备号, temperature int DEFAULT NULL COMMENT 温度, dept_id bigint NOT NULL COMMENT 部门编号车间, del_flag char(1) DEFAULT 0 COMMENT 删除标志0代表存在 2代表删除, create_by varchar(64) DEFAULT COMMENT 创建者, create_time datetime DEFAULT NULL COMMENT 创建时间, update_by varchar(64) DEFAULT COMMENT 更新者, update_time datetime DEFAULT NULL COMMENT 更新时间, remark varchar(500) DEFAULT NULL COMMENT 备注, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8mb4 COMMENT车间设备表;三、菜单设计在系统工具 - 代码生成中生成车间设备表点击生成代码之后便可以在系统工具菜单下找到四、权限设计创建测试用户并分配权限新增用户权限修改五、后端代码修改启用若依数据权限注解若依框架提供了强大的DataScope注解配合 MyBatis 的 SQL 拦截器可以很方便地实现数据行级别的过滤。1. Service 层添加注解找到ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeviceServiceImpl.java中的列表查询方法添加DataScope注解。Override DataScope(deptAlias d, userAlias u) // 添加此行 public ListSysDevice selectSysDeviceList(SysDevice sysDevice) { return sysDeviceMapper.selectSysDeviceList(sysDevice); }2. Mapper XML 注入数据权限 SQL找到ruoyi-system/src/main/resources/mapper/system/SysDeviceMapper.xml中的selectSysDeviceList查询在 where 条件末尾添加${params.dataScope}select idselectSysDeviceList parameterTypeSysDevice resultMapSysDeviceResult include refidselectSysDeviceVo/ where d.del_flag 0 if testdeviceCode ! null and deviceCode ! and d.device_code #{deviceCode}/if if testtemperature ! null and d.temperature #{temperature}/if if testdeptId ! null and d.dept_id #{deptId}/if !-- ⭐ 数据权限过滤关键行 -- ${params.dataScope} /where /select五、最终效果展示场景一超级管理员 admin 登录可以查看所有设备记录场景二普通用户只能查看部门设备记录