添加权限处理统一入口

This commit is contained in:
bf109f 2023-12-17 15:40:42 +08:00
parent 944e04eeac
commit 978151a53a
3 changed files with 65 additions and 5 deletions

View File

@ -91,4 +91,32 @@ public interface IDialect {
String forSelectEntityListByIds(TableInfo tableInfo, Object[] primaryValues); 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) {
}
} }

View File

@ -0,0 +1,22 @@
package com.mybatisflex.core.dialect;
/**
* 操作类型
*/
public enum OperateType {
/**
* 查询
*/
SELECT,
/**
* 更新
*/
UPDATE,
/**
* 删除
*/
DELETE,
;
}

View File

@ -18,6 +18,7 @@ package com.mybatisflex.core.dialect.impl;
import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.dialect.KeywordWrap; import com.mybatisflex.core.dialect.KeywordWrap;
import com.mybatisflex.core.dialect.LimitOffsetProcessor; import com.mybatisflex.core.dialect.LimitOffsetProcessor;
import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.exception.locale.LocalizedFormats; import com.mybatisflex.core.exception.locale.LocalizedFormats;
import com.mybatisflex.core.logicdelete.LogicDeleteManager; import com.mybatisflex.core.logicdelete.LogicDeleteManager;
@ -164,6 +165,7 @@ public class CommonsDialectImpl implements IDialect {
} }
sql.append(wrap(primaryKeys[i])).append(EQUALS_PLACEHOLDER); sql.append(wrap(primaryKeys[i])).append(EQUALS_PLACEHOLDER);
} }
prepareAuth(schema, table, sql, OperateType.DELETE);
return sql.toString(); return sql.toString();
} }
@ -205,11 +207,13 @@ public class CommonsDialectImpl implements IDialect {
sql.append(wrap(primaryKeys[0])).append(EQUALS_PLACEHOLDER); sql.append(wrap(primaryKeys[0])).append(EQUALS_PLACEHOLDER);
} }
} }
prepareAuth(schema, table, sql, OperateType.DELETE);
return sql.toString(); return sql.toString();
} }
@Override @Override
public String forDeleteByQuery(QueryWrapper queryWrapper) { public String forDeleteByQuery(QueryWrapper queryWrapper) {
prepareAuth(queryWrapper, OperateType.DELETE);
return buildDeleteSql(queryWrapper); return buildDeleteSql(queryWrapper);
} }
@ -252,12 +256,13 @@ public class CommonsDialectImpl implements IDialect {
} }
sql.append(wrap(primaryKeys[i])).append(EQUALS_PLACEHOLDER); sql.append(wrap(primaryKeys[i])).append(EQUALS_PLACEHOLDER);
} }
prepareAuth(schema, table, sql, OperateType.UPDATE);
return sql.toString(); return sql.toString();
} }
@Override @Override
public String forUpdateByQuery(QueryWrapper queryWrapper, Row row) { public String forUpdateByQuery(QueryWrapper queryWrapper, Row row) {
prepareAuth(queryWrapper, OperateType.UPDATE);
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
Set<String> modifyAttrs = RowCPI.getModifyAttrs(row); Set<String> modifyAttrs = RowCPI.getModifyAttrs(row);
@ -332,11 +337,13 @@ public class CommonsDialectImpl implements IDialect {
} }
sql.append(wrap(primaryKeys[i])).append(EQUALS_PLACEHOLDER); sql.append(wrap(primaryKeys[i])).append(EQUALS_PLACEHOLDER);
} }
prepareAuth(schema, table, sql, OperateType.SELECT);
return sql.toString(); return sql.toString();
} }
@Override @Override
public String forSelectByQuery(QueryWrapper queryWrapper) { public String forSelectByQuery(QueryWrapper queryWrapper) {
prepareAuth(queryWrapper, OperateType.SELECT);
return buildSelectSql(queryWrapper); return buildSelectSql(queryWrapper);
} }
@ -664,6 +671,7 @@ public class CommonsDialectImpl implements IDialect {
//租户ID //租户ID
tableInfo.buildTenantCondition(sql, tenantIdArgs, this); tableInfo.buildTenantCondition(sql, tenantIdArgs, this);
prepareAuth(tableInfo, sql, OperateType.DELETE);
return sql.toString(); return sql.toString();
} }
@ -723,7 +731,7 @@ public class CommonsDialectImpl implements IDialect {
sql.append(BRACKET_RIGHT).append(AND).append(buildLogicNormalCondition(logicDeleteColumn, tableInfo)); sql.append(BRACKET_RIGHT).append(AND).append(buildLogicNormalCondition(logicDeleteColumn, tableInfo));
tableInfo.buildTenantCondition(sql, tenantIdArgs, this); tableInfo.buildTenantCondition(sql, tenantIdArgs, this);
prepareAuth(tableInfo, sql, OperateType.DELETE);
return sql.toString(); return sql.toString();
} }
@ -738,6 +746,7 @@ public class CommonsDialectImpl implements IDialect {
} }
prepareAuth(queryWrapper, OperateType.DELETE);
//逻辑删除 //逻辑删除
List<QueryTable> queryTables = CPI.getQueryTables(queryWrapper); List<QueryTable> queryTables = CPI.getQueryTables(queryWrapper);
List<QueryTable> joinTables = CPI.getJoinTables(queryWrapper); List<QueryTable> joinTables = CPI.getJoinTables(queryWrapper);
@ -823,12 +832,13 @@ public class CommonsDialectImpl implements IDialect {
sql.append(AND).append(wrap(versionColumn)).append(EQUALS).append(versionValue); sql.append(AND).append(wrap(versionColumn)).append(EQUALS).append(versionValue);
} }
prepareAuth(tableInfo, sql, OperateType.UPDATE);
return sql.toString(); return sql.toString();
} }
@Override @Override
public String forUpdateEntityByQuery(TableInfo tableInfo, Object entity, boolean ignoreNulls, QueryWrapper queryWrapper) { public String forUpdateEntityByQuery(TableInfo tableInfo, Object entity, boolean ignoreNulls, QueryWrapper queryWrapper) {
prepareAuth(queryWrapper, OperateType.UPDATE);
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
Set<String> updateColumns = tableInfo.obtainUpdateColumns(entity, ignoreNulls, true); Set<String> updateColumns = tableInfo.obtainUpdateColumns(entity, ignoreNulls, true);
@ -916,7 +926,7 @@ public class CommonsDialectImpl implements IDialect {
//多租户 //多租户
Object[] tenantIdArgs = tableInfo.buildTenantIdArgs(); Object[] tenantIdArgs = tableInfo.buildTenantIdArgs();
tableInfo.buildTenantCondition(sql, tenantIdArgs, this); tableInfo.buildTenantCondition(sql, tenantIdArgs, this);
prepareAuth(tableInfo, sql, OperateType.SELECT);
return sql.toString(); return sql.toString();
} }
@ -972,7 +982,7 @@ public class CommonsDialectImpl implements IDialect {
//多租户 //多租户
tableInfo.buildTenantCondition(sql, tenantIdArgs, this); tableInfo.buildTenantCondition(sql, tenantIdArgs, this);
prepareAuth(tableInfo, sql, OperateType.SELECT);
return sql.toString(); return sql.toString();
} }