新增OrganProperties.superAdminProdOrgIgnoreEnable,配置位置为chenfeng.organ.superadmin-prod-org-ignore-enable,支持配置后在超管的情况下也塞入organid

This commit is contained in:
gaoqr
2024-06-25 11:53:56 +08:00
parent 9fee8cceee
commit a3fec229a4
4 changed files with 17 additions and 5 deletions
@@ -39,4 +39,8 @@ public class OrganProperties {
*/ */
private Set<String> ignoreTables = Collections.emptySet(); private Set<String> ignoreTables = Collections.emptySet();
/**
* 超级管理员生产微服务(exec、manage等)开启(默认开启)忽略多组织 :控制是否自动填充organ_id
*/
private Boolean superAdminProdOrgIgnoreEnable = ENABLE_DEFAULT;
} }
@@ -1,18 +1,15 @@
package com.cf.imes.framework.organ.core.db; package com.cf.imes.framework.organ.core.db;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.cf.imes.framework.organ.config.OrganProperties; import com.cf.imes.framework.organ.config.OrganProperties;
import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.enums.permission.RoleCodeEnum;
import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue; import net.sf.jsqlparser.expression.LongValue;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
@@ -25,6 +22,8 @@ public class OrganDatabaseInterceptor implements TenantLineHandler {
private final Set<String> ignoreTables = new HashSet<>(); private final Set<String> ignoreTables = new HashSet<>();
private Boolean superAdminProdOrgIgnoreEnable;
public OrganDatabaseInterceptor(OrganProperties properties) { public OrganDatabaseInterceptor(OrganProperties properties) {
// 不同 DB 下,大小写的习惯不同,所以需要都添加进去 // 不同 DB 下,大小写的习惯不同,所以需要都添加进去
properties.getIgnoreTables().forEach(table -> { properties.getIgnoreTables().forEach(table -> {
@@ -33,6 +32,12 @@ public class OrganDatabaseInterceptor implements TenantLineHandler {
}); });
// 在 OracleKeyGenerator 中,生成主键时,会查询这个表,查询这个表后,会自动拼接 ORGAN_ID 导致报错 // 在 OracleKeyGenerator 中,生成主键时,会查询这个表,查询这个表后,会自动拼接 ORGAN_ID 导致报错
ignoreTables.add("DUAL"); ignoreTables.add("DUAL");
Boolean orgIgnoreEnableFromConfig = properties.getSuperAdminProdOrgIgnoreEnable();
if (orgIgnoreEnableFromConfig != null) {
superAdminProdOrgIgnoreEnable = orgIgnoreEnableFromConfig;
} else {
superAdminProdOrgIgnoreEnable = true;
}
} }
@Override @Override
@@ -47,9 +52,10 @@ public class OrganDatabaseInterceptor implements TenantLineHandler {
@Override @Override
public boolean ignoreTable(String tableName) { public boolean ignoreTable(String tableName) {
System.out.println(superAdminProdOrgIgnoreEnable);
return OrganContextHolder.isIgnore() // 情况一,全局忽略多组织 return OrganContextHolder.isIgnore() // 情况一,全局忽略多组织
|| CollUtil.contains(ignoreTables, tableName) // 情况二,忽略多组织的表 || CollUtil.contains(ignoreTables, tableName) // 情况二,忽略多组织的表
|| isAdmin(); //情况三,忽略超级管理员 || (isAdmin() && superAdminProdOrgIgnoreEnable); //情况三,忽略超级管理员
} }
private boolean isAdmin() { private boolean isAdmin() {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
@@ -150,6 +150,7 @@ chenfeng:
- com.cf.imes.module.executor.enums.ErrorCodeConstants - com.cf.imes.module.executor.enums.ErrorCodeConstants
organ: # 多组织相关配置项 organ: # 多组织相关配置项
enable: true enable: true
superadmin-prod-org-ignore-enable: false
ignore-urls: ignore-urls:
- /rpc-api/** - /rpc-api/**
ignore-tables: ignore-tables:
@@ -150,6 +150,7 @@ chenfeng:
- com.cf.imes.module.manage.enums.ErrorCodeConstants - com.cf.imes.module.manage.enums.ErrorCodeConstants
organ: # 多组织相关配置项 organ: # 多组织相关配置项
enable: true enable: true
superadmin-prod-org-ignore-enable: false
ignore-urls: ignore-urls:
- /rpc-api/** - /rpc-api/**
ignore-tables: ignore-tables: