From ec77669c51017a6945e54d15769d11c12532c598 Mon Sep 17 00:00:00 2001 From: dhb52 Date: Tue, 23 Jul 2024 23:56:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../annotation/DataPermissionIgnored.java | 23 ++++++++++++++ .../aspectj/DataPermissionIgnoredAspect.java | 31 +++++++++++++++++++ .../mybatis/config/MybatisPlusConfig.java | 9 ++++++ .../demo/controller/TestDemoController.java | 2 ++ 4 files changed, 65 insertions(+) create mode 100644 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermissionIgnored.java create mode 100644 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/aspectj/DataPermissionIgnoredAspect.java diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermissionIgnored.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermissionIgnored.java new file mode 100644 index 000000000..0984cfc7c --- /dev/null +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermissionIgnored.java @@ -0,0 +1,23 @@ +package org.dromara.common.mybatis.annotation; + +import java.lang.annotation.*; + +/** + * 忽略数据权限注解。 + * 当需要在忽略数据权限的上下文中直接或间接调用 Mapper 时候, + * 可以使用该注解修饰当前函数,避免显式的使用 + *
+ *      DataPermissionHelper.ignore(() -> {
+ *          // 业务代码
+ *      });
+ * 
+ * 减少代码作用域层级,这尤其在执行定时任务的时候具有明显优势。 + * + * @author dhb52 + * @version 5.2.1 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataPermissionIgnored { +} diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/aspectj/DataPermissionIgnoredAspect.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/aspectj/DataPermissionIgnoredAspect.java new file mode 100644 index 000000000..3cbaaf9af --- /dev/null +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/aspectj/DataPermissionIgnoredAspect.java @@ -0,0 +1,31 @@ +package org.dromara.common.mybatis.aspectj; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.dromara.common.mybatis.annotation.DataPermissionIgnored; +import org.dromara.common.mybatis.helper.DataPermissionHelper; + +/** + * 忽略数据权限, 相应注解 {@link DataPermissionIgnored } + * + * @author dhb52 + * @since 5.2.1 + */ +@Aspect +public class DataPermissionIgnoredAspect { + + @Around("@annotation(dataPermissionIgnored)") + @SuppressWarnings("unused") + public Object around(ProceedingJoinPoint joinPoint, DataPermissionIgnored dataPermissionIgnored) { + + return DataPermissionHelper.ignore(() -> { + try { + return joinPoint.proceed(); + } catch (Throwable e) { + throw new RuntimeException(e); + } + }); + + } +} diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java index 0bc5b66a1..eeb4466fd 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/config/MybatisPlusConfig.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerIntercept import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import org.dromara.common.core.factory.YmlPropertySourceFactory; import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.mybatis.aspectj.DataPermissionIgnoredAspect; import org.dromara.common.mybatis.handler.InjectionMetaObjectHandler; import org.dromara.common.mybatis.handler.MybatisExceptionHandler; import org.dromara.common.mybatis.interceptor.PlusDataPermissionInterceptor; @@ -116,4 +117,12 @@ public class MybatisPlusConfig { * https://baomidou.com/pages/2a45ff/ */ + /** + * 忽略数据权限 + */ + @Bean + public DataPermissionIgnoredAspect dataPermissionIgnoredAspect() { + return new DataPermissionIgnoredAspect(); + } + } diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestDemoController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestDemoController.java index f31c54074..af6164f9b 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestDemoController.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/TestDemoController.java @@ -7,6 +7,7 @@ import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.QueryGroup; +import org.dromara.common.mybatis.annotation.DataPermissionIgnored; import org.dromara.common.web.core.BaseController; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.mybatis.core.page.PageQuery; @@ -52,6 +53,7 @@ public class TestDemoController extends BaseController { */ @SaCheckPermission("demo:demo:list") @GetMapping("/list") + // @DataPermissionIgnored public TableDataInfo list(@Validated(QueryGroup.class) TestDemoBo bo, PageQuery pageQuery) { return testDemoService.queryPageList(bo, pageQuery); }