Browse Source

👣 重构底层多租户

master
wangxiang 3 years ago
parent
commit
c5283f8726
  1. 2
      kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/KiccUser.java
  2. 24
      kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/plugins/KiccTenantLineInnerInterceptor.java
  3. 9
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java

2
kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/KiccUser.java

@ -1,6 +1,7 @@
package com.cloud.kicc.common.data.entity; package com.cloud.kicc.common.data.entity;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.User;
@ -38,6 +39,7 @@ public class KiccUser extends User {
* 多租户ID * 多租户ID
*/ */
@Getter @Getter
@Setter
private String tenantId; private String tenantId;
public KiccUser(String id, String deptId, String username, String password, String phone, String tenantId, boolean enabled, public KiccUser(String id, String deptId, String username, String password, String phone, String tenantId, boolean enabled,

24
kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/plugins/KiccTenantLineInnerInterceptor.java

@ -91,7 +91,8 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor {
}); });
statementBuilder.delete(statementBuilder.length()-4, statementBuilder.length()); statementBuilder.delete(statementBuilder.length()-4, statementBuilder.length());
TenantLikeExpression tenantLikeExpression = new TenantLikeExpression(statementBuilder.toString()); TenantLikeExpression tenantLikeExpression = new TenantLikeExpression(statementBuilder.toString());
duplicateUpdateColumns.add(tenantLikeExpression); Parenthesis parenthesis = new Parenthesis(tenantLikeExpression);
duplicateUpdateColumns.add(parenthesis);
} }
Select select = insert.getSelect(); Select select = insert.getSelect();
@ -145,10 +146,11 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor {
}); });
statementBuilder.delete(statementBuilder.length()-4, statementBuilder.length()); statementBuilder.delete(statementBuilder.length()-4, statementBuilder.length());
TenantLikeExpression tenantLikeExpression = new TenantLikeExpression(statementBuilder.toString()); TenantLikeExpression tenantLikeExpression = new TenantLikeExpression(statementBuilder.toString());
Parenthesis parenthesis = new Parenthesis(tenantLikeExpression);
if (null != where) { if (null != where) {
return where instanceof OrExpression ? new AndExpression(tenantLikeExpression, new Parenthesis(where)) : new AndExpression(tenantLikeExpression, where); return where instanceof OrExpression ? new AndExpression(parenthesis, new Parenthesis(where)) : new AndExpression(parenthesis, where);
} else { } else {
return tenantLikeExpression; return parenthesis;
} }
} }
@ -158,7 +160,7 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor {
return currentExpression; return currentExpression;
} else { } else {
// 替换likeExpression支持查询多个租户ID的条件,包括查询数据对应多个多租户ID的数据 // 替换likeExpression支持查询多个租户ID的条件,包括查询数据对应多个多租户ID的数据
List<TenantLikeExpression> strExpressions = tables.stream() List<Parenthesis> likeParenthesisExpressions = tables.stream()
.filter(x -> !this.tenantLineHandler.ignoreTable(x.getName())) .filter(x -> !this.tenantLineHandler.ignoreTable(x.getName()))
.map(item -> { .map(item -> {
List<String> tenantIds = StrUtil.split(this.tenantLineHandler.getTenantId().toString(), ","); List<String> tenantIds = StrUtil.split(this.tenantLineHandler.getTenantId().toString(), ",");
@ -171,15 +173,17 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor {
}); });
statementBuilder.delete(statementBuilder.length()-4, statementBuilder.length()); statementBuilder.delete(statementBuilder.length()-4, statementBuilder.length());
TenantLikeExpression tenantLikeExpression = new TenantLikeExpression(statementBuilder.toString()); TenantLikeExpression tenantLikeExpression = new TenantLikeExpression(statementBuilder.toString());
return tenantLikeExpression; Parenthesis parenthesis = new Parenthesis(tenantLikeExpression);
return parenthesis;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
if (CollectionUtils.isEmpty(strExpressions)) {
if (CollectionUtils.isEmpty(likeParenthesisExpressions)) {
return currentExpression; return currentExpression;
} else { } else {
Expression injectExpression = strExpressions.get(0); Expression injectExpression = likeParenthesisExpressions.get(0);
if (strExpressions.size() > 1) { if (likeParenthesisExpressions.size() > 1) {
for(int i = 1; i < strExpressions.size(); ++i) { for(int i = 1; i < likeParenthesisExpressions.size(); ++i) {
injectExpression = new AndExpression(injectExpression, strExpressions.get(i)); injectExpression = new AndExpression(injectExpression, likeParenthesisExpressions.get(i));
} }
} }

9
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java

@ -205,4 +205,13 @@ public class UserController {
return userService.list(); return userService.list();
} }
@SysLog("用户多租户更改")
@PutMapping("/changeTenement")
@PreAuthorize("@pms.hasPermission('user_edit')")
public R changeTenement(String[] TenantIds) {
SecurityUtils.getUser().setTenantId(String.join(",", TenantIds));
System.out.println("租户信息:" + SecurityUtils.getUser().getTenantId());
return R.ok();
}
} }

Loading…
Cancel
Save