一、背景与痛点

常规后台系统权限设计只做到功能权限控制:用户-角色-菜单/按钮权限。但在真实企业层级组织架构下,存在大量数据隔离问题:

  • 不同部门员工只能查看本部门及下属部门数据;

  • 上级单位可向下兼容下级所有数据,下级无法向上越级查看;

  • 普通用户无数据权限时,需要空数据兜底,禁止全表泄露;

  • 业务SQL数量庞大,手写每个数据过滤条件极易遗漏、代码侵入严重、维护成本极高。

基于以上痛点,本文设计一套基于组织树全路径匹配的全自动数据权限方案,结合RBAC体系实现功能权限+数据权限双层管控。

二、整体设计思路

本方案核心设计思想:

以「组织树全路径」作为数据权限唯一维度,通过登录会话缓存用户权限范围,结合Mybatis全局SQL拦截器自动拼接数据过滤条件,实现无侵入、全自动的数据权限隔离。

整体分为五层:

  1. 数据库层:完善RBAC五表体系,区分功能权限、数据权限;

  2. 数据存储层:所有业务数据表存储组织全路径字段;

  3. 用户会话层:登录加载用户数据权限范围,存入Session/Token;

  4. SQL拦截层:全局解析SQL,自动追加组织路径前缀过滤条件;

  5. 兜底防护层:无权限范围直接返回空数据,杜绝全表数据泄露。

三、数据库表结构设计

采用标准RBAC增强模型,区分「功能权限」和「数据权限」,完整数据表如下:

3.1 核心数据表

  • 用户表:存储用户基础信息

  • 角色表:定义系统角色(管理员、普通员工、部门负责人)

  • 权限表(核心):区分功能权限、数据权限

  • 用户角色关联表:一个用户多个角色

  • 角色权限关联表:角色绑定功能/数据权限

  • 岗位表(可选):支持岗位维度权限控制

3.2 权限表设计亮点

权限表统一存储:权限类型 + 权限对象(组织树全路径)

  • 权限类型:功能权限 / 数据权限

  • 权限对象:组织树节点全路径,例如:A/B、A/B/C

不再单独设计复杂数据权限表,通过全路径字段即可支持任意层级组织、无限级部门数据隔离。

3.3 业务数据表规范

所有需要数据隔离的业务表,必须保留「组织全路径字段」。

例如:

  • 订单表、记录表、业务流水表,均存放当前数据所属组织的完整树路径

  • 示例:总部/华东分部/杭州分部 => HQ/EAST/HZ

核心原理:数据属于哪个组织节点,就存储该节点的全路径,为后续前缀匹配过滤提供依据。

四、权限加载与会话存储流程

4.1 用户登录权限加载

用户登录成功后,系统自动执行:

  1. 查询当前用户绑定的所有角色;

  2. 通过角色关联关系,批量查询用户拥有的数据权限组织范围;

  3. 将用户可访问的组织全路径集合统一存入会话信息(Token/Session);

4.2 权限存储结构

用户会话中缓存:

  • 可访问组织路径列表:[A/B, A/B/C]

  • 功能权限标识集合

优势:一次登录、全局缓存、无需每次SQL查询数据库权限,性能极高。

五、核心技术:Mybatis SQL拦截器自动数据过滤

本方案最核心、最精华部分:基于Mybatis拦截器 + SQL语法解析,全自动拼接数据权限条件,业务代码零侵入。

5.1 实现原理

  1. 拦截所有业务查询SQL;

  2. 通过SQL解析器解析查询主体、表字段;

  3. 获取当前登录用户会话中的组织权限全路径;

  4. 自动拼接 全路径前缀模糊匹配 条件;

  5. 实现「本级及下属所有数据可见」的层级数据权限。

5.2 匹配规则(核心规则)

用户权限范围:A/B

数据组织全路径:A/B/C/D

匹配逻辑:数据全路径 以 用户权限路径 为前缀 = 可见数据

完美适配企业层级架构:

  • 上级节点自动兼容所有下级数据

  • 下级无法向上匹配上级路径,天然隔离上级数据

5.3 兜底安全机制(重中之重)

如果用户未配置任何数据权限、会话权限为空,直接返回空数据,禁止查询全部数据。

杜绝权限漏配导致的全表数据泄露,解决绝大多数数据权限方案的安全漏洞。

六、完整执行链路总结

  1. 用户登录,加载角色、数据权限组织范围;

  2. 将可访问组织全路径集合存入用户会话;

  3. 业务发起任意查询SQL;

  4. Mybatis拦截器拦截SQL并解析;

  5. 自动追加组织全路径前缀匹配条件;

  6. 无权限则兜底返回空;有权限则过滤出本级+下级数据;

  7. 业务代码完全无感、零侵入。

七、方案架构亮点

1. 权限体系完整:同时支撑功能权限 + 层级数据权限,标准RBAC增强落地

2. 组织层级无限适配:基于全路径前缀匹配,不限制部门层级深度

3. 业务零侵入:基于Mybatis全局拦截,无需每个业务手写过滤条件

4. 性能优异:登录缓存权限、SQL拦截轻量解析、无重复DB查询

5. 安全性极高:空权限强制兜底,杜绝全表数据泄露风险

6. 扩展性强:支持多角色权限合并、多组织权限叠加、岗位权限扩展

八、潜在风险与优化方案

风险1:SQL解析复杂语句出错

优化:针对关联查询、子查询、分组查询做解析兼容,同时增加白名单机制,对系统内部SQL放行。

风险2:权限路径配置不规范导致数据过滤异常

优化:后台新增组织路径自动生成规则,统一分隔符、统一层级格式,避免人工配置错误。

风险3:多角色多权限路径叠加冲突

优化:登录时合并去重所有角色的数据权限路径,拼接 OR 多条件匹配。

风险4:超级管理员权限处理

优化:超级管理员单独标记,跳过SQL拦截,直接查询全量数据,兼顾权限严谨性与管理便捷性。

风险5:会话权限缓存过期、刷新不及时

优化:权限变更后强制刷新用户Token权限缓存,或支持主动重新加载权限。

九、方案取舍与深度思考

本套数据权限方案属于轻量、通用、高安全、低侵入的企业级标准落地方案。相较于传统的「角色固定数据范围」「硬编码SQL过滤」,本方案通过组织树全路径模型彻底解决了无限层级组织的数据隔离难题,同时依托Mybatis拦截器实现全局自动化过滤,极大降低了业务开发成本。

在设计取舍上,本方案放弃了重型的数据权限规则引擎,采用「标准化字段 + 前缀匹配」的轻量化思路,在保证安全性的同时,保证了系统的高性能、高可维护性。同时通过空权限兜底机制解决了行业内绝大多数数据权限方案的安全短板,避免权限漏配导致的核心数据泄露事故。

该方案适用于95%以上的企业级后台系统,是中小型项目、中台业务系统最优选的数据权限落地架构。

十、总结

本文基于增强RBAC模型,设计了一套组织树全路径 + 会话权限缓存 + Mybatis SQL拦截自动过滤的数据权限架构。

实现了:功能权限精准控制、层级数据自动隔离、无侵入SQL过滤、空权限安全兜底,完美解决企业多级组织架构下的数据安全隔离问题。方案简洁、稳定、安全、可直接生产落地。

标签:RBAC数据权限功能权限组织树SQL拦截器Mybatis权限架构后端架构

Logo

一站式 AI 云服务平台

更多推荐