feat:(REQ-2699) 修改产品权限缓存,增加版本,类型等
This commit is contained in:
parent
9e0e09f805
commit
202d0797dc
@ -65,6 +65,21 @@ public class IdentityAuthReq {
|
|||||||
@Builder.Default
|
@Builder.Default
|
||||||
private boolean useCache = true;
|
private boolean useCache = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app类型(APP:原生,H5:h5页面)
|
||||||
|
*/
|
||||||
|
private String appType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目code(H5会拉取项目下所有的元素)
|
||||||
|
*/
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端版本号
|
||||||
|
*/
|
||||||
|
private Integer versionMax;
|
||||||
|
|
||||||
public IdentityAuthRes toEmpty() {
|
public IdentityAuthRes toEmpty() {
|
||||||
IdentityAuthRes result = new IdentityAuthRes();
|
IdentityAuthRes result = new IdentityAuthRes();
|
||||||
result.setIdentity(this.getIdentityId());
|
result.setIdentity(this.getIdentityId());
|
||||||
|
|||||||
@ -0,0 +1,34 @@
|
|||||||
|
package cn.axzo.tyr.client.model.req;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
||||||
|
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
||||||
|
import cn.axzo.foundation.page.IPageReq;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PageElementReq implements IPageReq {
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
Integer page;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
Integer pageSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序:使用示例,createTime__DESC
|
||||||
|
*/
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
List<String> sort;
|
||||||
|
|
||||||
|
@CriteriaField(field = "code", operator = Operator.IN)
|
||||||
|
private Set<String> codes;
|
||||||
|
}
|
||||||
@ -73,6 +73,9 @@ public class PageSaasFeatureResourceReq implements IPageReq {
|
|||||||
@CriteriaField(field = "terminal", operator = Operator.IN)
|
@CriteriaField(field = "terminal", operator = Operator.IN)
|
||||||
private Set<String> terminals;
|
private Set<String> terminals;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Boolean needPageElement;
|
||||||
|
|
||||||
public PageResp toEmpty() {
|
public PageResp toEmpty() {
|
||||||
return PageResp.builder()
|
return PageResp.builder()
|
||||||
.current(this.getPage())
|
.current(this.getPage())
|
||||||
|
|||||||
@ -63,6 +63,8 @@ public class PageElementResp {
|
|||||||
*/
|
*/
|
||||||
private Boolean selected;
|
private Boolean selected;
|
||||||
|
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 子元素(只包含一级)
|
* 子元素(只包含一级)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -148,6 +149,11 @@ public class SaasFeatureResourceResp {
|
|||||||
*/
|
*/
|
||||||
private String uniCode;
|
private String uniCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面元素信息
|
||||||
|
*/
|
||||||
|
private List<PageElementResp> saasPageElements;
|
||||||
|
|
||||||
public Set<Long> resolvePath() {
|
public Set<Long> resolvePath() {
|
||||||
return Optional.ofNullable(this.getPath())
|
return Optional.ofNullable(this.getPath())
|
||||||
.map(e -> Arrays.stream(e.split(",")).map(Long::valueOf).collect(Collectors.toSet()))
|
.map(e -> Arrays.stream(e.split(",")).map(Long::valueOf).collect(Collectors.toSet()))
|
||||||
|
|||||||
@ -712,6 +712,11 @@ public class PrivateController {
|
|||||||
return rolePermissionCacheService.list(request);
|
return rolePermissionCacheService.list(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/api/private/productPermissionCached/list")
|
||||||
|
public Object productPermissionCached(@RequestBody ProductPermissionCacheService.ListProductPermissionParam request) {
|
||||||
|
return productPermissionCacheService.list(request);
|
||||||
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|||||||
@ -14,7 +14,6 @@ import cn.axzo.tyr.server.service.ProductFeatureRelationService;
|
|||||||
import cn.axzo.tyr.server.service.ProductPermissionCacheService;
|
import cn.axzo.tyr.server.service.ProductPermissionCacheService;
|
||||||
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
@ -27,7 +26,6 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -205,20 +203,21 @@ public class CacheProductPermissionHandler implements InitializingBean {
|
|||||||
if (Objects.isNull(featureResource)) {
|
if (Objects.isNull(featureResource)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Set<String> featureCodes = Optional.ofNullable(featureResource.getFeatureCodes())
|
|
||||||
.orElseGet(() -> Sets.newHashSet(featureResource.getUniCode()));
|
|
||||||
|
|
||||||
if (CollectionUtils.isEmpty(featureCodes)) {
|
if (CollectionUtils.isEmpty(featureResource.getSaasPageElements())) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ProductPermissionCacheService.PermissionDTO> permissionDTOS = featureCodes.stream()
|
List<ProductPermissionCacheService.PermissionDTO> permissionDTOS = featureResource.getSaasPageElements().stream()
|
||||||
.map(featureCode -> ProductPermissionCacheService.PermissionDTO.builder()
|
.map(pageElement -> ProductPermissionCacheService.PermissionDTO.builder()
|
||||||
.featureId(featureResource.getId())
|
.featureId(featureResource.getId())
|
||||||
.featureCode(featureCode)
|
.featureCode(pageElement.getCode())
|
||||||
.featureType(featureResource.getFeatureType())
|
.featureType(featureResource.getFeatureType())
|
||||||
.terminal(featureResource.getTerminal())
|
.terminal(featureResource.getTerminal())
|
||||||
.cooperateType(relation.getDictCode())
|
.cooperateType(relation.getDictCode())
|
||||||
|
.itemCode(pageElement.getItemCode())
|
||||||
|
.version(pageElement.getVersion())
|
||||||
|
.appType(pageElement.getAppType())
|
||||||
.build())
|
.build())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
@ -226,20 +225,20 @@ public class CacheProductPermissionHandler implements InitializingBean {
|
|||||||
.map(parentFeatureResources::get)
|
.map(parentFeatureResources::get)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.map(f -> {
|
.map(f -> {
|
||||||
|
if (CollectionUtils.isEmpty(f.getSaasPageElements())) {
|
||||||
Set<String> parentFeatureCodes = Optional.ofNullable(f.getFeatureCodes())
|
|
||||||
.orElseGet(() -> Sets.newHashSet(f.getUniCode()));
|
|
||||||
if (CollectionUtils.isEmpty(parentFeatureCodes)) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return parentFeatureCodes.stream()
|
return f.getSaasPageElements().stream()
|
||||||
.map(featureCode -> ProductPermissionCacheService.PermissionDTO.builder()
|
.map(pageElement -> ProductPermissionCacheService.PermissionDTO.builder()
|
||||||
.featureId(f.getId())
|
.featureId(f.getId())
|
||||||
.featureCode(featureCode)
|
.featureCode(pageElement.getCode())
|
||||||
.featureType(f.getFeatureType())
|
.featureType(f.getFeatureType())
|
||||||
.terminal(f.getTerminal())
|
.terminal(f.getTerminal())
|
||||||
.cooperateType(relation.getDictCode())
|
.cooperateType(relation.getDictCode())
|
||||||
|
.itemCode(pageElement.getItemCode())
|
||||||
|
.version(pageElement.getVersion())
|
||||||
|
.appType(pageElement.getAppType())
|
||||||
.build())
|
.build())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
})
|
})
|
||||||
@ -266,7 +265,7 @@ public class CacheProductPermissionHandler implements InitializingBean {
|
|||||||
|
|
||||||
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
||||||
.ids(featureIds)
|
.ids(featureIds)
|
||||||
.needFeatureCodes(true)
|
.needPageElement(true)
|
||||||
.build();
|
.build();
|
||||||
return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream()
|
return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream()
|
||||||
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s));
|
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s));
|
||||||
@ -284,10 +283,9 @@ public class CacheProductPermissionHandler implements InitializingBean {
|
|||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 存在pre环境更改了节点的父节点,可能导致产品没有父节点的权限,这里补齐父节点的权限
|
|
||||||
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
||||||
.ids(parentIds)
|
.ids(parentIds)
|
||||||
.needFeatureCodes(true)
|
.needPageElement(true)
|
||||||
.build();
|
.build();
|
||||||
return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream()
|
return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream()
|
||||||
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s));
|
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s));
|
||||||
|
|||||||
@ -2,8 +2,6 @@ package cn.axzo.tyr.server.event.inner;
|
|||||||
|
|
||||||
import cn.axzo.framework.rocketmq.Event;
|
import cn.axzo.framework.rocketmq.Event;
|
||||||
import cn.axzo.framework.rocketmq.EventConsumer;
|
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||||
import cn.axzo.framework.rocketmq.EventHandler;
|
|
||||||
import cn.axzo.tyr.client.model.req.PageProductFeatureRelationReq;
|
|
||||||
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
||||||
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
||||||
import cn.axzo.tyr.client.model.res.SaasPermissionRelationRes;
|
import cn.axzo.tyr.client.model.res.SaasPermissionRelationRes;
|
||||||
@ -12,12 +10,10 @@ import cn.axzo.tyr.server.event.payload.PageElementFeatureResourceUpsertPayload;
|
|||||||
import cn.axzo.tyr.server.event.payload.RolePermissionCreatedPayload;
|
import cn.axzo.tyr.server.event.payload.RolePermissionCreatedPayload;
|
||||||
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
|
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasFeature;
|
import cn.axzo.tyr.server.repository.entity.SaasFeature;
|
||||||
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
|
|
||||||
import cn.axzo.tyr.server.service.RolePermissionCacheService;
|
import cn.axzo.tyr.server.service.RolePermissionCacheService;
|
||||||
import cn.axzo.tyr.server.service.RoleService;
|
import cn.axzo.tyr.server.service.RoleService;
|
||||||
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
@ -30,7 +26,6 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -192,17 +187,15 @@ public class CacheRolePermissionHandler implements InitializingBean {
|
|||||||
if (Objects.isNull(featureResource)) {
|
if (Objects.isNull(featureResource)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Set<String> featureCodes = Optional.ofNullable(featureResource.getFeatureCodes())
|
|
||||||
.orElseGet(() -> Sets.newHashSet(featureResource.getUniCode()));
|
|
||||||
|
|
||||||
if (CollectionUtils.isEmpty(featureCodes)) {
|
if (CollectionUtils.isEmpty(featureResource.getSaasPageElements())) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<RolePermissionCacheService.PermissionDTO> permissionDTOS = featureCodes.stream()
|
List<RolePermissionCacheService.PermissionDTO> permissionDTOS = featureResource.getSaasPageElements().stream()
|
||||||
.map(featureCode -> RolePermissionCacheService.PermissionDTO.builder()
|
.map(pageElement -> RolePermissionCacheService.PermissionDTO.builder()
|
||||||
.featureId(featureResource.getId())
|
.featureId(featureResource.getId())
|
||||||
.featureCode(featureCode)
|
.featureCode(pageElement.getCode())
|
||||||
.featureType(featureResource.getFeatureType())
|
.featureType(featureResource.getFeatureType())
|
||||||
.terminal(featureResource.getTerminal())
|
.terminal(featureResource.getTerminal())
|
||||||
.build())
|
.build())
|
||||||
@ -213,16 +206,14 @@ public class CacheRolePermissionHandler implements InitializingBean {
|
|||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.map(f -> {
|
.map(f -> {
|
||||||
|
|
||||||
Set<String> parentFeatureCodes = Optional.ofNullable(f.getFeatureCodes())
|
if (CollectionUtils.isEmpty(featureResource.getSaasPageElements())) {
|
||||||
.orElseGet(() -> Sets.newHashSet(f.getUniCode()));
|
|
||||||
if (CollectionUtils.isEmpty(parentFeatureCodes)) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return parentFeatureCodes.stream()
|
return featureResource.getSaasPageElements().stream()
|
||||||
.map(featureCode -> RolePermissionCacheService.PermissionDTO.builder()
|
.map(pageElement -> RolePermissionCacheService.PermissionDTO.builder()
|
||||||
.featureId(f.getId())
|
.featureId(f.getId())
|
||||||
.featureCode(featureCode)
|
.featureCode(pageElement.getCode())
|
||||||
.featureType(f.getFeatureType())
|
.featureType(f.getFeatureType())
|
||||||
.terminal(f.getTerminal())
|
.terminal(f.getTerminal())
|
||||||
.build())
|
.build())
|
||||||
@ -256,7 +247,7 @@ public class CacheRolePermissionHandler implements InitializingBean {
|
|||||||
|
|
||||||
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
||||||
.ids(featureIds)
|
.ids(featureIds)
|
||||||
.needFeatureCodes(true)
|
.needPageElement(true)
|
||||||
.build();
|
.build();
|
||||||
return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream()
|
return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream()
|
||||||
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s));
|
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s));
|
||||||
@ -277,7 +268,7 @@ public class CacheRolePermissionHandler implements InitializingBean {
|
|||||||
// 存在pre环境更改了节点的父节点,可能导致产品没有父节点的权限,这里补齐父节点的权限
|
// 存在pre环境更改了节点的父节点,可能导致产品没有父节点的权限,这里补齐父节点的权限
|
||||||
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
|
||||||
.ids(parentIds)
|
.ids(parentIds)
|
||||||
.needFeatureCodes(true)
|
.needPageElement(true)
|
||||||
.build();
|
.build();
|
||||||
return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream()
|
return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream()
|
||||||
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s));
|
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s));
|
||||||
|
|||||||
@ -86,5 +86,20 @@ public interface ProductPermissionCacheService {
|
|||||||
private String terminal;
|
private String terminal;
|
||||||
|
|
||||||
private Integer featureType;
|
private Integer featureType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* app类型(APP:原生,H5:h5页面)
|
||||||
|
*/
|
||||||
|
private String appType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目code(H5会拉取项目下所有的元素)
|
||||||
|
*/
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端版本号
|
||||||
|
*/
|
||||||
|
private Integer version;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,7 +1,12 @@
|
|||||||
package cn.axzo.tyr.server.service;
|
package cn.axzo.tyr.server.service;
|
||||||
|
|
||||||
import cn.axzo.framework.domain.page.PageResp;
|
import cn.axzo.framework.domain.page.PageResp;
|
||||||
import cn.axzo.tyr.client.model.req.*;
|
import cn.axzo.tyr.client.model.req.GetPageElementReq;
|
||||||
|
import cn.axzo.tyr.client.model.req.GetUserHasPermissionPageElementReq;
|
||||||
|
import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO;
|
||||||
|
import cn.axzo.tyr.client.model.req.PageElementReportReq;
|
||||||
|
import cn.axzo.tyr.client.model.req.PageElementReq;
|
||||||
|
import cn.axzo.tyr.client.model.req.PageQueryElementReq;
|
||||||
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
|
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
|
||||||
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
|
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
|
||||||
import cn.axzo.tyr.client.model.res.PageElementResp;
|
import cn.axzo.tyr.client.model.res.PageElementResp;
|
||||||
@ -70,4 +75,9 @@ public interface SaasPageElementService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
GetUserHasPermissionPageElementResp getUserHasPermissionPageElement(GetUserHasPermissionPageElementReq request);
|
GetUserHasPermissionPageElementResp getUserHasPermissionPageElement(GetUserHasPermissionPageElementReq request);
|
||||||
|
|
||||||
|
|
||||||
|
List<PageElementResp> list(PageElementReq param);
|
||||||
|
|
||||||
|
cn.axzo.foundation.page.PageResp<PageElementResp> page(PageElementReq param);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,11 +22,13 @@ import cn.axzo.tyr.client.model.req.FeatureResourceTreeSaveReq;
|
|||||||
import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
|
import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
|
||||||
import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO;
|
import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO;
|
||||||
import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq;
|
import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq;
|
||||||
|
import cn.axzo.tyr.client.model.req.PageElementReq;
|
||||||
import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq;
|
import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq;
|
||||||
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
||||||
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
||||||
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
|
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
|
||||||
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
|
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
|
||||||
|
import cn.axzo.tyr.client.model.res.PageElementResp;
|
||||||
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
||||||
import cn.axzo.tyr.server.common.util.Throws;
|
import cn.axzo.tyr.server.common.util.Throws;
|
||||||
import cn.axzo.tyr.server.config.MqProducer;
|
import cn.axzo.tyr.server.config.MqProducer;
|
||||||
@ -73,7 +75,7 @@ import org.springframework.data.redis.core.SessionCallback;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -81,6 +83,7 @@ import java.util.Map;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_RESOURCE_NOT_FOUND;
|
import static cn.axzo.tyr.server.config.exception.BizResultCode.FEATURE_RESOURCE_NOT_FOUND;
|
||||||
@ -588,15 +591,22 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
|
|||||||
|
|
||||||
Map<String, Set<String>> uniCodeFeatureCodeMap = listFeatureCodes(param, page.getRecords());
|
Map<String, Set<String>> uniCodeFeatureCodeMap = listFeatureCodes(param, page.getRecords());
|
||||||
|
|
||||||
return PageConverter.toResp(page, e -> from(e, uniCodeFeatureCodeMap));
|
Map<String, List<PageElementResp>> pageElements = listPageElements(param, page.getRecords());
|
||||||
|
|
||||||
|
return PageConverter.toResp(page, e -> from(e,
|
||||||
|
uniCodeFeatureCodeMap,
|
||||||
|
pageElements));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SaasFeatureResourceResp from(SaasFeatureResource featureResource,
|
private SaasFeatureResourceResp from(SaasFeatureResource featureResource,
|
||||||
Map<String, Set<String>> uniCodeFeatureCodeMap) {
|
Map<String, Set<String>> uniCodeFeatureCodeMap,
|
||||||
|
Map<String, List<PageElementResp>> pageElements) {
|
||||||
SaasFeatureResourceResp saasFeatureResourceResp = SaasFeatureResourceResp.builder().build();
|
SaasFeatureResourceResp saasFeatureResourceResp = SaasFeatureResourceResp.builder().build();
|
||||||
BeanUtils.copyProperties(featureResource, saasFeatureResourceResp);
|
BeanUtils.copyProperties(featureResource, saasFeatureResourceResp);
|
||||||
|
|
||||||
saasFeatureResourceResp.setFeatureCodes(uniCodeFeatureCodeMap.get(featureResource.getUniCode()));
|
saasFeatureResourceResp.setFeatureCodes(uniCodeFeatureCodeMap.get(featureResource.getUniCode()));
|
||||||
|
|
||||||
|
saasFeatureResourceResp.setSaasPageElements(pageElements.get(saasFeatureResourceResp.getUniCode()));
|
||||||
return saasFeatureResourceResp;
|
return saasFeatureResourceResp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -617,6 +627,41 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
|
|||||||
.stream()
|
.stream()
|
||||||
.collect(Collectors.groupingBy(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode,
|
.collect(Collectors.groupingBy(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode,
|
||||||
Collectors.mapping(SaasPageElementFeatureResourceRelation::getPageElementCode, Collectors.toSet())));
|
Collectors.mapping(SaasPageElementFeatureResourceRelation::getPageElementCode, Collectors.toSet())));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, List<PageElementResp>> listPageElements(PageSaasFeatureResourceReq param,
|
||||||
|
List<SaasFeatureResource> saasFeatureResources) {
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(saasFeatureResources) || BooleanUtils.isNotTrue(param.getNeedPageElement())) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<String> uniCodes = saasFeatureResources.stream()
|
||||||
|
.map(SaasFeatureResource::getUniCode)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
PageElementFeatureResourceRelationReq pageElementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq.builder()
|
||||||
|
.featureResourceUniCodes(uniCodes)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
List<SaasPageElementFeatureResourceRelation> pageElementFeatureResourceRelations = saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq);
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(pageElementFeatureResourceRelations)) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<String> elementCodes = pageElementFeatureResourceRelations.stream()
|
||||||
|
.map(SaasPageElementFeatureResourceRelation::getPageElementCode)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
PageElementReq pageElementReq = PageElementReq.builder()
|
||||||
|
.codes(elementCodes)
|
||||||
|
.build();
|
||||||
|
Map<String, PageElementResp> elementMap = saasPageElementService.list(pageElementReq).stream()
|
||||||
|
.collect(Collectors.toMap(PageElementResp::getCode, Function.identity()));
|
||||||
|
|
||||||
|
return pageElementFeatureResourceRelations.stream()
|
||||||
|
.collect(Collectors.groupingBy(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode,
|
||||||
|
Collectors.mapping(e -> elementMap.get(e.getPageElementCode()), Collectors.toList())));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -466,4 +466,14 @@ public class SaasPageElementServiceImpl implements SaasPageElementService {
|
|||||||
|
|
||||||
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
|
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PageElementResp> list(PageElementReq param) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public cn.axzo.foundation.page.PageResp<PageElementResp> page(PageElementReq param) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package cn.axzo.tyr.server.service.impl;
|
|||||||
|
|
||||||
import cn.axzo.apollo.workspace.common.enums.TableIsDeleteEnum;
|
import cn.axzo.apollo.workspace.common.enums.TableIsDeleteEnum;
|
||||||
import cn.axzo.basics.common.BeanMapper;
|
import cn.axzo.basics.common.BeanMapper;
|
||||||
import cn.axzo.basics.common.util.StopWatchUtil;
|
|
||||||
import cn.axzo.framework.domain.ServiceException;
|
import cn.axzo.framework.domain.ServiceException;
|
||||||
import cn.axzo.pokonyan.util.TraceSupplier;
|
import cn.axzo.pokonyan.util.TraceSupplier;
|
||||||
import cn.axzo.thrones.client.saas.ServicePkgClient;
|
import cn.axzo.thrones.client.saas.ServicePkgClient;
|
||||||
@ -85,7 +84,6 @@ import cn.hutool.core.lang.Pair;
|
|||||||
import cn.hutool.core.util.BooleanUtil;
|
import cn.hutool.core.util.BooleanUtil;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
@ -1503,19 +1501,11 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private IdentityAuthRes findIdentityAuthV2(IdentityAuthReq identityAuthReq) {
|
private IdentityAuthRes findIdentityAuthV2(IdentityAuthReq identityAuthReq) {
|
||||||
StopWatch watch = StopWatch.create("redis:");
|
|
||||||
watch.start("redis:query workspaceProductPermission");
|
|
||||||
Map<Long, List<WorkspaceProductService.ProductPermission>> workspaceProductPermissions = listWorkspaceProductPermission(identityAuthReq);
|
Map<Long, List<WorkspaceProductService.ProductPermission>> workspaceProductPermissions = listWorkspaceProductPermission(identityAuthReq);
|
||||||
watch.stop();
|
|
||||||
|
|
||||||
watch.start("redis:query userRole");
|
|
||||||
List<SaasRoleUserV2DTO> saasRoleUsers = listRoleUserRelationsV2(identityAuthReq);
|
List<SaasRoleUserV2DTO> saasRoleUsers = listRoleUserRelationsV2(identityAuthReq);
|
||||||
log.info("redis:saasRoleUsers:", JSON.toJSONString(saasRoleUsers));
|
|
||||||
watch.stop();
|
|
||||||
|
|
||||||
watch.start("redis:query rolePermission");
|
|
||||||
Map<Long, List<RolePermissionCacheService.PermissionDTO>> rolePermissions = listRolePermission(identityAuthReq, saasRoleUsers);
|
Map<Long, List<RolePermissionCacheService.PermissionDTO>> rolePermissions = listRolePermission(identityAuthReq, saasRoleUsers);
|
||||||
watch.stop();
|
|
||||||
|
|
||||||
Map<String, List<SaasRoleUserV2DTO.SaasRole>> workspaceRoles = saasRoleUsers.stream()
|
Map<String, List<SaasRoleUserV2DTO.SaasRole>> workspaceRoles = saasRoleUsers.stream()
|
||||||
.collect(Collectors.groupingBy(e -> e.getSaasRoleUser().buildOuWorkspaceKey(),
|
.collect(Collectors.groupingBy(e -> e.getSaasRoleUser().buildOuWorkspaceKey(),
|
||||||
@ -1530,7 +1520,6 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
|
|||||||
// CMP、CMS新旧菜单树id不会重复
|
// CMP、CMS新旧菜单树id不会重复
|
||||||
List<SaasFeatureResourceService.SaasFeatureResourceCache> allFeatures = listSaasFeatureCaches(terminals);
|
List<SaasFeatureResourceService.SaasFeatureResourceCache> allFeatures = listSaasFeatureCaches(terminals);
|
||||||
|
|
||||||
watch.start("redis:resolve permission");
|
|
||||||
List<IdentityAuthRes.WorkspacePermission> permissions = identityAuthReq.getWorkspaceOusPairs().stream()
|
List<IdentityAuthRes.WorkspacePermission> permissions = identityAuthReq.getWorkspaceOusPairs().stream()
|
||||||
.map(workspaceOuPair -> {
|
.map(workspaceOuPair -> {
|
||||||
List<ProductPermissionCacheService.PermissionDTO> productPermissions = Optional.ofNullable(workspaceProductPermissions.get(workspaceOuPair.getWorkspaceId()))
|
List<ProductPermissionCacheService.PermissionDTO> productPermissions = Optional.ofNullable(workspaceProductPermissions.get(workspaceOuPair.getWorkspaceId()))
|
||||||
@ -1538,6 +1527,12 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
|
|||||||
.map(WorkspaceProductService.ProductPermission::getPermissions)
|
.map(WorkspaceProductService.ProductPermission::getPermissions)
|
||||||
.filter(f -> !CollectionUtils.isEmpty(f))
|
.filter(f -> !CollectionUtils.isEmpty(f))
|
||||||
.flatMap(Collection::stream)
|
.flatMap(Collection::stream)
|
||||||
|
.filter(f -> StringUtils.isBlank(identityAuthReq.getItemCode())
|
||||||
|
|| Objects.equals(identityAuthReq.getItemCode(), f.getItemCode()))
|
||||||
|
.filter(f -> StringUtils.isBlank(identityAuthReq.getAppType())
|
||||||
|
|| Objects.equals(identityAuthReq.getAppType(), f.getAppType()))
|
||||||
|
.filter(f -> Objects.isNull(identityAuthReq.getVersionMax())
|
||||||
|
|| identityAuthReq.getVersionMax().compareTo(f.getVersion()) < 1)
|
||||||
.collect(Collectors.toList()))
|
.collect(Collectors.toList()))
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
@ -1553,8 +1548,6 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
|
|||||||
return buildPermissionsV2(workspaceOuPair, productPermissions, saasRoles, rolePermissions, allFeatures);
|
return buildPermissionsV2(workspaceOuPair, productPermissions, saasRoles, rolePermissions, allFeatures);
|
||||||
})
|
})
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
watch.stop();
|
|
||||||
watch.prettyPrint(TimeUnit.MILLISECONDS);
|
|
||||||
|
|
||||||
IdentityAuthRes result = new IdentityAuthRes();
|
IdentityAuthRes result = new IdentityAuthRes();
|
||||||
result.setIdentity(identityAuthReq.getIdentityId());
|
result.setIdentity(identityAuthReq.getIdentityId());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user