From 0ed0a01e7723fbb3c3eebc93f63680c353418826 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Wed, 28 Feb 2024 23:40:10 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.1.1=E3=80=91=E3=80=90db=E3=80=91?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mp/datascope/ProjectDataScopeHandler.java | 43 +++++++++++++++++++ .../ProjectMyBatisPlusAutoConfiguration.java | 16 +++++++ 2 files changed, 59 insertions(+) create mode 100644 kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/datascope/ProjectDataScopeHandler.java diff --git a/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/datascope/ProjectDataScopeHandler.java b/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/datascope/ProjectDataScopeHandler.java new file mode 100644 index 000000000..362041226 --- /dev/null +++ b/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/datascope/ProjectDataScopeHandler.java @@ -0,0 +1,43 @@ +package cn.stylefeng.roses.kernel.db.mp.datascope; + +import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; +import net.sf.jsqlparser.expression.operators.relational.ExpressionList; +import net.sf.jsqlparser.expression.operators.relational.InExpression; +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.schema.Table; + +import java.util.Arrays; + +/** + * 项目数据权限的处理器 + * + * @author fengshuonan + * @since 2024/2/28 21:16 + */ +public class ProjectDataScopeHandler implements MultiDataPermissionHandler { + + @Override + public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) { + + // 创建 org_id 列 + Column column = new Column("org_id"); + + // 创建 IN 表达式的值列表 + ExpressionList expressionList = new ExpressionList(); + expressionList.setExpressions(Arrays.asList( + new LongValue(1), + new LongValue(2), + new LongValue(3) + )); + + // 创建 IN 表达式 + InExpression inExpression = new InExpression(); + inExpression.setLeftExpression(column); + inExpression.setRightItemsList(expressionList); + + return inExpression; + } + +} diff --git a/kernel-d-db/db-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/db/starter/ProjectMyBatisPlusAutoConfiguration.java b/kernel-d-db/db-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/db/starter/ProjectMyBatisPlusAutoConfiguration.java index 6a5aedbf3..ef8273f51 100644 --- a/kernel-d-db/db-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/db/starter/ProjectMyBatisPlusAutoConfiguration.java +++ b/kernel-d-db/db-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/db/starter/ProjectMyBatisPlusAutoConfiguration.java @@ -25,6 +25,7 @@ package cn.stylefeng.roses.kernel.db.starter; import cn.stylefeng.roses.kernel.db.api.pojo.tenant.TenantTableProperties; +import cn.stylefeng.roses.kernel.db.mp.datascope.ProjectDataScopeHandler; import cn.stylefeng.roses.kernel.db.mp.dbid.CustomDatabaseIdProvider; import cn.stylefeng.roses.kernel.db.mp.fieldfill.CustomMetaObjectHandler; import cn.stylefeng.roses.kernel.db.mp.injector.CustomInsertBatchSqlInjector; @@ -32,6 +33,7 @@ import cn.stylefeng.roses.kernel.db.mp.tenant.ProjectTenantInterceptor; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; @@ -80,6 +82,9 @@ public class ProjectMyBatisPlusAutoConfiguration { // 使用分页插插件 interceptor.addInnerInterceptor(paginationInterceptor()); + // 使用数据权限插件 + interceptor.addInnerInterceptor(dataPermissionInterceptor()); + // 使用乐观锁插件 interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); @@ -153,4 +158,15 @@ public class ProjectMyBatisPlusAutoConfiguration { return new TenantLineInnerInterceptor(new ProjectTenantInterceptor(tenantTableProperties)); } + /** + * 数据范围处理插件 + * + * @author fengshuonan + * @since 2024/2/28 21:17 + */ + @Bean + public DataPermissionInterceptor dataPermissionInterceptor() { + return new DataPermissionInterceptor(new ProjectDataScopeHandler()); + } + }