From 978151a53aaf3053f676856316fa900354e53f92 Mon Sep 17 00:00:00 2001 From: bf109f <13848692+bf109f@user.noreply.gitee.com> Date: Sun, 17 Dec 2023 15:40:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9D=83=E9=99=90=E5=A4=84?= =?UTF-8?q?=E7=90=86=E7=BB=9F=E4=B8=80=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisflex/core/dialect/IDialect.java | 28 +++++++++++++++++++ .../mybatisflex/core/dialect/OperateType.java | 22 +++++++++++++++ .../core/dialect/impl/CommonsDialectImpl.java | 20 +++++++++---- 3 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/OperateType.java diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java index 9d993fb5..1d4e40d1 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java @@ -91,4 +91,32 @@ public interface IDialect { String forSelectEntityListByIds(TableInfo tableInfo, Object[] primaryValues); + /** + * 权限处理 + * + * @param queryWrapper queryWrapper + * @param operateType 操作类型 + */ + default void prepareAuth(QueryWrapper queryWrapper, OperateType operateType) { + } + + /** + * 权限处理 + * + * @param schema schema + * @param tableName 表名 + * @param sql sql + * @param operateType 操作类型 + */ + default void prepareAuth(String schema, String tableName, StringBuilder sql, OperateType operateType) { + } + + /** + * 权限处理 + * @param tableInfo tableInfo + * @param sql sql + * @param operateType 操作类型 + */ + default void prepareAuth(TableInfo tableInfo, StringBuilder sql, OperateType operateType) { + } } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/OperateType.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/OperateType.java new file mode 100644 index 00000000..ee19f331 --- /dev/null +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/OperateType.java @@ -0,0 +1,22 @@ +package com.mybatisflex.core.dialect; + +/** + * 操作类型 + */ +public enum OperateType { + /** + * 查询 + */ + SELECT, + + /** + * 更新 + */ + UPDATE, + + /** + * 删除 + */ + DELETE, + ; +} diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java index 165f8b44..d423d3a2 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java @@ -18,6 +18,7 @@ package com.mybatisflex.core.dialect.impl; import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.dialect.KeywordWrap; import com.mybatisflex.core.dialect.LimitOffsetProcessor; +import com.mybatisflex.core.dialect.OperateType; import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.exception.locale.LocalizedFormats; import com.mybatisflex.core.logicdelete.LogicDeleteManager; @@ -164,6 +165,7 @@ public class CommonsDialectImpl implements IDialect { } sql.append(wrap(primaryKeys[i])).append(EQUALS_PLACEHOLDER); } + prepareAuth(schema, table, sql, OperateType.DELETE); return sql.toString(); } @@ -205,11 +207,13 @@ public class CommonsDialectImpl implements IDialect { sql.append(wrap(primaryKeys[0])).append(EQUALS_PLACEHOLDER); } } + prepareAuth(schema, table, sql, OperateType.DELETE); return sql.toString(); } @Override public String forDeleteByQuery(QueryWrapper queryWrapper) { + prepareAuth(queryWrapper, OperateType.DELETE); return buildDeleteSql(queryWrapper); } @@ -252,12 +256,13 @@ public class CommonsDialectImpl implements IDialect { } sql.append(wrap(primaryKeys[i])).append(EQUALS_PLACEHOLDER); } - + prepareAuth(schema, table, sql, OperateType.UPDATE); return sql.toString(); } @Override public String forUpdateByQuery(QueryWrapper queryWrapper, Row row) { + prepareAuth(queryWrapper, OperateType.UPDATE); StringBuilder sqlBuilder = new StringBuilder(); Set modifyAttrs = RowCPI.getModifyAttrs(row); @@ -332,11 +337,13 @@ public class CommonsDialectImpl implements IDialect { } sql.append(wrap(primaryKeys[i])).append(EQUALS_PLACEHOLDER); } + prepareAuth(schema, table, sql, OperateType.SELECT); return sql.toString(); } @Override public String forSelectByQuery(QueryWrapper queryWrapper) { + prepareAuth(queryWrapper, OperateType.SELECT); return buildSelectSql(queryWrapper); } @@ -664,6 +671,7 @@ public class CommonsDialectImpl implements IDialect { //租户ID tableInfo.buildTenantCondition(sql, tenantIdArgs, this); + prepareAuth(tableInfo, sql, OperateType.DELETE); return sql.toString(); } @@ -723,7 +731,7 @@ public class CommonsDialectImpl implements IDialect { sql.append(BRACKET_RIGHT).append(AND).append(buildLogicNormalCondition(logicDeleteColumn, tableInfo)); tableInfo.buildTenantCondition(sql, tenantIdArgs, this); - + prepareAuth(tableInfo, sql, OperateType.DELETE); return sql.toString(); } @@ -738,6 +746,7 @@ public class CommonsDialectImpl implements IDialect { } + prepareAuth(queryWrapper, OperateType.DELETE); //逻辑删除 List queryTables = CPI.getQueryTables(queryWrapper); List joinTables = CPI.getJoinTables(queryWrapper); @@ -823,12 +832,13 @@ public class CommonsDialectImpl implements IDialect { sql.append(AND).append(wrap(versionColumn)).append(EQUALS).append(versionValue); } - + prepareAuth(tableInfo, sql, OperateType.UPDATE); return sql.toString(); } @Override public String forUpdateEntityByQuery(TableInfo tableInfo, Object entity, boolean ignoreNulls, QueryWrapper queryWrapper) { + prepareAuth(queryWrapper, OperateType.UPDATE); StringBuilder sqlBuilder = new StringBuilder(); Set updateColumns = tableInfo.obtainUpdateColumns(entity, ignoreNulls, true); @@ -916,7 +926,7 @@ public class CommonsDialectImpl implements IDialect { //多租户 Object[] tenantIdArgs = tableInfo.buildTenantIdArgs(); tableInfo.buildTenantCondition(sql, tenantIdArgs, this); - + prepareAuth(tableInfo, sql, OperateType.SELECT); return sql.toString(); } @@ -972,7 +982,7 @@ public class CommonsDialectImpl implements IDialect { //多租户 tableInfo.buildTenantCondition(sql, tenantIdArgs, this); - + prepareAuth(tableInfo, sql, OperateType.SELECT); return sql.toString(); }