数据权限
数据权限用于限制用户能查询到的业务数据范围。它与接口权限不同:@SaCheckPermission 决定能否调用接口,数据权限决定调用后能看到哪些记录。
- 全部数据
- 自定义部门
- 本部门
- 本部门及以下
- 仅本人
- 在需要过滤数据的查询入口使用
@DataPermission。 - 明确实体中的部门字段与用户字段映射。
- 超级管理员绕过过滤,普通角色按数据范围生成条件。
- 详情、导出和批量操作同样必须应用数据权限,不能只保护列表。
@DataPermission 可以用于类或方法,内部通过 @DataColumn 把权限表达式关键字映射到数据库字段:
/** 查询受当前用户数据范围限制的用户列表。 */@DataPermission({ @DataColumn(key = "deptName", value = "dept_id"), @DataColumn(key = "userName", value = "user_id")})public Page<SysUserVo> selectPageUserList(SysUserQuery query, PageQuery pageQuery) { return userMapper.selectPageUserList(query, pageQuery);}默认映射是 deptName -> dept_id。实际字段必须与查询中的表或别名一致,关联查询时尤其要避免列名歧义。
数据权限不仅影响列表查询。按 ID 查看、更新、删除和导出前,都应确认目标数据位于当前用户的数据范围内。项目中的 DataScopeAccess、DataScopeRule 与 DataScopeWriteRule 分别承载权限访问、读取规则和写入规则。
至少准备管理员、部门负责人和普通员工三类账号,分别验证跨部门列表、详情访问、导出与修改操作;同时检查最终 SQL 是否包含预期的数据范围条件。