“车间设备”模块数据权限控制
2026/6/3 15:51:55 网站建设 项目流程

前言

在企业级系统开发中,数据权限是比菜单权限更核心的安全控制能力。简单来说:

  • 菜单权限控制“能不能进这个页面”

  • 数据权限控制“进了页面后,能看到哪些具体数据”

本文基于若依(RuoYi)框架,带领大家从零实现一个车间设备数据按部门隔离的功能。最终效果是:不同部门的用户登录系统后,只能查看本部门的设备数据,而超级管理员可以查看全部设备数据。

一、需求分析

  1. 功能:车间设备管理,支持列表查询、数据权限过滤
  2. 权限规则:
    • 普通用户:仅查看本部门设备
    • 超级管理员:查看全部设备
  3. 设备号:固定为sxy_001
  4. 技术:若依框架 + 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`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 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 List<SysDevice> 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 id="selectSysDeviceList" parameterType="SysDevice" resultMap="SysDeviceResult"> <include refid="selectSysDeviceVo"/> <where> d.del_flag = '0' <if test="deviceCode != null and deviceCode != ''"> and d.device_code = #{deviceCode}</if> <if test="temperature != null"> and d.temperature = #{temperature}</if> <if test="deptId != null"> and d.dept_id = #{deptId}</if> <!-- ⭐ 数据权限过滤:关键行 --> ${params.dataScope} </where> </select>

五、最终效果展示

场景一:超级管理员 admin 登录

可以查看所有设备记录

场景二:普通用户

只能查看部门设备记录

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询