feat(REQ-2300):获取提交数据的workspaceId
This commit is contained in:
parent
3934d0337f
commit
52f5e9b546
@ -34,4 +34,10 @@ public @interface DataPermission {
|
|||||||
*/
|
*/
|
||||||
String key_personId() default "personId";
|
String key_personId() default "personId";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求体的workspaceId
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String requestBodyWorkspaceId() default "";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,8 @@ import cn.axzo.karma.client.feign.tyr.request.GetMergeMatchDataReq;
|
|||||||
import cn.axzo.karma.client.feign.tyr.request.MatchDataObjectReq;
|
import cn.axzo.karma.client.feign.tyr.request.MatchDataObjectReq;
|
||||||
import cn.axzo.karma.client.feign.tyr.response.MatchDataObjectResp;
|
import cn.axzo.karma.client.feign.tyr.response.MatchDataObjectResp;
|
||||||
import cn.axzo.karma.client.feign.tyr.response.MergeMatchDataResp;
|
import cn.axzo.karma.client.feign.tyr.response.MergeMatchDataResp;
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -27,6 +29,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
|
|||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.axzo.framework.datapermission.context.DataPermissionContextHolder.DATA_PERMISSION_HEADER;
|
import static cn.axzo.framework.datapermission.context.DataPermissionContextHolder.DATA_PERMISSION_HEADER;
|
||||||
|
|
||||||
@ -114,7 +117,7 @@ public class DataPermissionInterceptor {
|
|||||||
// String dataPermissionHeader = httpRequest.getHeader(DATA_PERMISSION_HEADER);
|
// String dataPermissionHeader = httpRequest.getHeader(DATA_PERMISSION_HEADER);
|
||||||
// header中有值,表示数据权限规则已经被解析,只需要获取数据去使用
|
// header中有值,表示数据权限规则已经被解析,只需要获取数据去使用
|
||||||
// if (StringUtils.isBlank(dataPermissionHeader)) {
|
// if (StringUtils.isBlank(dataPermissionHeader)) {
|
||||||
resolveRule(dataPermission);
|
resolveRule(dataPermission, httpRequest);
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
@ -127,14 +130,14 @@ public class DataPermissionInterceptor {
|
|||||||
* 解析数据权限规则
|
* 解析数据权限规则
|
||||||
* @param dataPermission
|
* @param dataPermission
|
||||||
*/
|
*/
|
||||||
private void resolveRule(DataPermission dataPermission) {
|
private void resolveRule(DataPermission dataPermission, HttpServletRequest httpRequest) {
|
||||||
|
|
||||||
ContextInfo contextInfo = ContextInfoHolder.get();
|
ContextInfo contextInfo = ContextInfoHolder.get();
|
||||||
if (contextInfo == null || contextInfo.getUserInfo() == null || StringUtils.isBlank(dataPermission.bizCode())) {
|
if (contextInfo == null || contextInfo.getUserInfo() == null || StringUtils.isBlank(dataPermission.bizCode())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<MatchDataObjectResp> matchDataObjectOptional = this.matchRule(dataPermission);
|
Optional<MatchDataObjectResp> matchDataObjectOptional = this.matchRule(dataPermission, httpRequest);
|
||||||
if (!matchDataObjectOptional.isPresent()) {
|
if (!matchDataObjectOptional.isPresent()) {
|
||||||
log.warn("no match data rule, bizCode:{}, personId:{}, ouId:{}, workspaceId:{}",
|
log.warn("no match data rule, bizCode:{}, personId:{}, ouId:{}, workspaceId:{}",
|
||||||
dataPermission.bizCode(),
|
dataPermission.bizCode(),
|
||||||
@ -155,14 +158,22 @@ public class DataPermissionInterceptor {
|
|||||||
DataPermissionContextHolder.setContext(dataPermissionContext);
|
DataPermissionContextHolder.setContext(dataPermissionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<MatchDataObjectResp> matchRule(DataPermission dataPermission) {
|
private Optional<MatchDataObjectResp> matchRule(DataPermission dataPermission, HttpServletRequest httpRequest) {
|
||||||
|
|
||||||
ContextInfo contextInfo = ContextInfoHolder.get();
|
ContextInfo contextInfo = ContextInfoHolder.get();
|
||||||
|
Long workspaceId = null;
|
||||||
|
String requestBodyWorkspaceId = dataPermission.requestBodyWorkspaceId();
|
||||||
|
if (StringUtils.isNotBlank(requestBodyWorkspaceId)) {
|
||||||
|
workspaceId = getRequestBodyWorkspaceId(httpRequest, requestBodyWorkspaceId);
|
||||||
|
}
|
||||||
|
if (Objects.isNull(workspaceId)) {
|
||||||
|
workspaceId = contextInfo.getWorkspaceId();
|
||||||
|
}
|
||||||
|
|
||||||
MatchDataObjectReq matchDataObjectReq = MatchDataObjectReq.builder()
|
MatchDataObjectReq matchDataObjectReq = MatchDataObjectReq.builder()
|
||||||
.dataObjectCode(dataPermission.bizCode())
|
.dataObjectCode(dataPermission.bizCode())
|
||||||
.ouId(contextInfo.getOuId())
|
.ouId(contextInfo.getOuId())
|
||||||
.workspaceId(contextInfo.getWorkspaceId())
|
.workspaceId(workspaceId)
|
||||||
.personId(contextInfo.getUserInfo().getPersonId())
|
.personId(contextInfo.getUserInfo().getPersonId())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -190,4 +201,19 @@ public class DataPermissionInterceptor {
|
|||||||
dataPermissionContext.setPersonIds(mergeMatchDataResp.getPersonIds());
|
dataPermissionContext.setPersonIds(mergeMatchDataResp.getPersonIds());
|
||||||
return dataPermissionContext;
|
return dataPermissionContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Long getRequestBodyWorkspaceId(HttpServletRequest httpRequest, String requestBodyWorkspaceIdKey) {
|
||||||
|
try {
|
||||||
|
String requestBody = httpRequest.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
JsonNode rootNode = mapper.readTree(requestBody);
|
||||||
|
String workspaceId = rootNode.path(requestBodyWorkspaceIdKey).asText();
|
||||||
|
if (StringUtils.isNotBlank(workspaceId)) {
|
||||||
|
return Long.valueOf(workspaceId);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("获取提交body里面的workspaceId出错", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user