新增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();
/**
* 超级管理员生产微服务(exec、manage等)开启(默认开启)忽略多组织 :控制是否自动填充organ_id
*/
private Boolean superAdminProdOrgIgnoreEnable = ENABLE_DEFAULT;
}
@@ -1,18 +1,15 @@
package com.cf.imes.framework.organ.core.db;
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.core.context.OrganContextHolder;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.cf.imes.framework.security.core.LoginUser;
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.LongValue;
import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -25,6 +22,8 @@ public class OrganDatabaseInterceptor implements TenantLineHandler {
private final Set<String> ignoreTables = new HashSet<>();
private Boolean superAdminProdOrgIgnoreEnable;
public OrganDatabaseInterceptor(OrganProperties properties) {
// 不同 DB 下,大小写的习惯不同,所以需要都添加进去
properties.getIgnoreTables().forEach(table -> {
@@ -33,6 +32,12 @@ public class OrganDatabaseInterceptor implements TenantLineHandler {
});
// 在 OracleKeyGenerator 中,生成主键时,会查询这个表,查询这个表后,会自动拼接 ORGAN_ID 导致报错
ignoreTables.add("DUAL");
Boolean orgIgnoreEnableFromConfig = properties.getSuperAdminProdOrgIgnoreEnable();
if (orgIgnoreEnableFromConfig != null) {
superAdminProdOrgIgnoreEnable = orgIgnoreEnableFromConfig;
} else {
superAdminProdOrgIgnoreEnable = true;
}
}
@Override
@@ -47,9 +52,10 @@ public class OrganDatabaseInterceptor implements TenantLineHandler {
@Override
public boolean ignoreTable(String tableName) {
System.out.println(superAdminProdOrgIgnoreEnable);
return OrganContextHolder.isIgnore() // 情况一,全局忽略多组织
|| CollUtil.contains(ignoreTables, tableName) // 情况二,忽略多组织的表
|| isAdmin(); //情况三,忽略超级管理员
|| CollUtil.contains(ignoreTables, tableName) // 情况二,忽略多组织的表
|| (isAdmin() && superAdminProdOrgIgnoreEnable); //情况三,忽略超级管理员
}
private boolean isAdmin() {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();