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); }