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