feat: 增加忽略数据权限注解

This commit is contained in:
dhb52 2024-07-23 23:56:47 +08:00
parent 0a3d5fd5d4
commit ec77669c51
4 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,23 @@
package org.dromara.common.mybatis.annotation;
import java.lang.annotation.*;
/**
* 忽略数据权限注解
* 当需要在忽略数据权限的上下文中直接或间接调用 Mapper 时候
* 可以使用该注解修饰当前函数避免显式的使用
* <pre>
* DataPermissionHelper.ignore(() -> {
* // 业务代码
* });
* </pre>
* 减少代码作用域层级这尤其在执行定时任务的时候具有明显优势
*
* @author dhb52
* @version 5.2.1
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataPermissionIgnored {
}

View File

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

View File

@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerIntercept
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import org.dromara.common.core.factory.YmlPropertySourceFactory; import org.dromara.common.core.factory.YmlPropertySourceFactory;
import org.dromara.common.core.utils.SpringUtils; 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.InjectionMetaObjectHandler;
import org.dromara.common.mybatis.handler.MybatisExceptionHandler; import org.dromara.common.mybatis.handler.MybatisExceptionHandler;
import org.dromara.common.mybatis.interceptor.PlusDataPermissionInterceptor; import org.dromara.common.mybatis.interceptor.PlusDataPermissionInterceptor;
@ -116,4 +117,12 @@ public class MybatisPlusConfig {
* https://baomidou.com/pages/2a45ff/ * https://baomidou.com/pages/2a45ff/
*/ */
/**
* 忽略数据权限
*/
@Bean
public DataPermissionIgnoredAspect dataPermissionIgnoredAspect() {
return new DataPermissionIgnoredAspect();
}
} }

View File

@ -7,6 +7,7 @@ import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.core.validate.QueryGroup; 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.web.core.BaseController;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
@ -52,6 +53,7 @@ public class TestDemoController extends BaseController {
*/ */
@SaCheckPermission("demo:demo:list") @SaCheckPermission("demo:demo:list")
@GetMapping("/list") @GetMapping("/list")
// @DataPermissionIgnored
public TableDataInfo<TestDemoVo> list(@Validated(QueryGroup.class) TestDemoBo bo, PageQuery pageQuery) { public TableDataInfo<TestDemoVo> list(@Validated(QueryGroup.class) TestDemoBo bo, PageQuery pageQuery) {
return testDemoService.queryPageList(bo, pageQuery); return testDemoService.queryPageList(bo, pageQuery);
} }