From 629e344af50cfc5163f0b5905d47328382b7cc1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 24 Aug 2026 11:48:56 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=AF=B9union=E8=AF=AD=E5=8F=A5=E4=B8=8D?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/mybatis/aspect/DataPermissionAdvice.java | 9 +++++++-- .../mybatis/handler/PlusDataPermissionHandler.java | 8 +++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/aspect/DataPermissionAdvice.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/aspect/DataPermissionAdvice.java index e0bacc4b1..81e5b6707 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/aspect/DataPermissionAdvice.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/aspect/DataPermissionAdvice.java @@ -26,14 +26,19 @@ public class DataPermissionAdvice implements MethodInterceptor { public Object invoke(MethodInvocation invocation) throws Throwable { Object target = invocation.getThis(); Method method = invocation.getMethod(); + DataPermission previousPermission = DataPermissionHelper.getPermission(); // 设置权限注解 DataPermissionHelper.setPermission(getDataPermissionAnnotation(target, method)); try { // 执行代理方法 return invocation.proceed(); } finally { - // 清除权限注解 - DataPermissionHelper.removePermission(); + // 恢复上一层权限上下文,兼容嵌套 Mapper 调用 + if (previousPermission == null) { + DataPermissionHelper.removePermission(); + } else { + DataPermissionHelper.setPermission(previousPermission); + } } } diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java index dc714e4ce..8e19c7237 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java @@ -71,13 +71,17 @@ public class PlusDataPermissionHandler { */ public Expression getSqlSegment(Expression where, boolean isSelect) { try { + DataPermission dataPermission = getDataPermission(); + if (dataPermission == null) { + throw new ServiceException("数据权限上下文缺失,请检查 @DataPermission 注解处理生命周期"); + } LoginUser currentUser = currentUser(); // 如果是超级管理员或租户管理员,则不过滤数据 if (LoginHelper.isSuperAdmin()) { return where; } // 构造数据过滤条件的 SQL 片段 - String dataFilterSql = buildDataFilter(getDataPermission(), currentUser, isSelect); + String dataFilterSql = buildDataFilter(dataPermission, currentUser, isSelect); if (StringUtils.isBlank(dataFilterSql)) { return where; } @@ -91,8 +95,6 @@ public class PlusDataPermissionHandler { } } catch (JSQLParserException e) { throw new ServiceException("数据权限解析异常 => " + e.getMessage()); - } finally { - DataPermissionHelper.removePermission(); } }