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 @@ @@ -1,6 +1,7 @@
package com.cloud.kicc.common.data.entity;
import lombok.Getter;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;
@ -38,6 +39,7 @@ public class KiccUser extends User { @@ -38,6 +39,7 @@ public class KiccUser extends User {
* 多租户ID
*/
@Getter
@Setter
private String tenantId;
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 { @@ -91,7 +91,8 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor {
});
statementBuilder.delete(statementBuilder.length()-4, statementBuilder.length());
TenantLikeExpression tenantLikeExpression = new TenantLikeExpression(statementBuilder.toString());
duplicateUpdateColumns.add(tenantLikeExpression);
Parenthesis parenthesis = new Parenthesis(tenantLikeExpression);
duplicateUpdateColumns.add(parenthesis);
}
Select select = insert.getSelect();
@ -145,10 +146,11 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor { @@ -145,10 +146,11 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor {
});
statementBuilder.delete(statementBuilder.length()-4, statementBuilder.length());
TenantLikeExpression tenantLikeExpression = new TenantLikeExpression(statementBuilder.toString());
Parenthesis parenthesis = new Parenthesis(tenantLikeExpression);
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 {
return tenantLikeExpression;
return parenthesis;
}
}
@ -158,7 +160,7 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor { @@ -158,7 +160,7 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor {
return currentExpression;
} else {
// 替换likeExpression支持查询多个租户ID的条件,包括查询数据对应多个多租户ID的数据
List<TenantLikeExpression> strExpressions = tables.stream()
List<Parenthesis> likeParenthesisExpressions = tables.stream()
.filter(x -> !this.tenantLineHandler.ignoreTable(x.getName()))
.map(item -> {
List<String> tenantIds = StrUtil.split(this.tenantLineHandler.getTenantId().toString(), ",");
@ -171,15 +173,17 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor { @@ -171,15 +173,17 @@ public class KiccTenantLineInnerInterceptor extends TenantLineInnerInterceptor {
});
statementBuilder.delete(statementBuilder.length()-4, statementBuilder.length());
TenantLikeExpression tenantLikeExpression = new TenantLikeExpression(statementBuilder.toString());
return tenantLikeExpression;
Parenthesis parenthesis = new Parenthesis(tenantLikeExpression);
return parenthesis;
}).collect(Collectors.toList());
if (CollectionUtils.isEmpty(strExpressions)) {
if (CollectionUtils.isEmpty(likeParenthesisExpressions)) {
return currentExpression;
} else {
Expression injectExpression = strExpressions.get(0);
if (strExpressions.size() > 1) {
for(int i = 1; i < strExpressions.size(); ++i) {
injectExpression = new AndExpression(injectExpression, strExpressions.get(i));
Expression injectExpression = likeParenthesisExpressions.get(0);
if (likeParenthesisExpressions.size() > 1) {
for(int i = 1; i < likeParenthesisExpressions.size(); ++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 { @@ -205,4 +205,13 @@ public class UserController {
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