feat:(REQ-2699) 菜单权限增加支持查询显示的菜单条件
This commit is contained in:
parent
9df330d835
commit
a39d00e980
@ -1,5 +1,6 @@
|
||||
package cn.axzo.tyr.client.model.req;
|
||||
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceStatus;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||
import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum;
|
||||
import cn.axzo.tyr.client.model.base.WorkspaceOUPair;
|
||||
@ -61,4 +62,9 @@ public class ListPermissionFeatureReq {
|
||||
* 查询父组件code下的有权限的uniCode
|
||||
*/
|
||||
private String parentUniCode;
|
||||
|
||||
/**
|
||||
* 显示或者隐藏,如果父节点是隐藏,则子节点也会隐藏
|
||||
*/
|
||||
private FeatureResourceStatus status;
|
||||
}
|
||||
|
||||
@ -4,7 +4,6 @@ import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
||||
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
||||
import cn.axzo.foundation.page.IPageReq;
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||
import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -77,6 +76,9 @@ public class PageSaasFeatureResourceReq implements IPageReq {
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean needPageElement;
|
||||
|
||||
@CriteriaField(field = "status", operator = Operator.EQ)
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 菜单跟页面元素绑定的类型
|
||||
*/
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.tyr.client.model.req;
|
||||
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceStatus;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||
import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum;
|
||||
import cn.axzo.tyr.client.model.base.WorkspaceOUPair;
|
||||
@ -73,4 +74,9 @@ public class TreePermissionReq {
|
||||
* 默认会增加config配置的默认权限,不需要就传true
|
||||
*/
|
||||
private Boolean excludeDefaultPermission;
|
||||
|
||||
/**
|
||||
* 显示或者隐藏,如果父节点是隐藏,则子节点也会隐藏
|
||||
*/
|
||||
private FeatureResourceStatus status;
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.tyr.server.job;
|
||||
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceStatus;
|
||||
import cn.axzo.tyr.client.model.enums.DelegatedType;
|
||||
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
||||
import cn.axzo.tyr.client.model.res.PageElementResp;
|
||||
@ -96,6 +97,7 @@ public class CacheSaasFeatureJob extends IJobHandler {
|
||||
.notAuth(SaasFeatureResource.AuthType.isAllRole(e.getAuthType()))
|
||||
.parentIds(e.resolvePath())
|
||||
.uniCode(e.getUniCode())
|
||||
.status(e.getStatus())
|
||||
.version(Optional.ofNullable(e.getSaasPageElements())
|
||||
.map(pageElement -> pageElement.stream()
|
||||
.findFirst()
|
||||
|
||||
@ -1,119 +1,126 @@
|
||||
package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.tyr.client.model.req.DeleteFeatureResourceReq;
|
||||
import cn.axzo.tyr.client.model.req.FeatureResourceTreeSaveReq;
|
||||
import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
|
||||
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
||||
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
|
||||
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
||||
import cn.axzo.tyr.server.model.ResourcePermission;
|
||||
import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 功能资源服务
|
||||
*
|
||||
* @version V1.0
|
||||
* @author: ZhanSiHu
|
||||
* @date: 2024/4/3 10:17
|
||||
*/
|
||||
public interface SaasFeatureResourceService extends IService<SaasFeatureResource> {
|
||||
|
||||
Long saveOrUpdateMenu(FeatureResourceTreeSaveReq req);
|
||||
|
||||
void updateFeatureAuthType(Long featureId, Integer authType);
|
||||
|
||||
/**递归的**/
|
||||
List<SaasFeatureResource> batchListDescendant(List<Long> featureIds);
|
||||
|
||||
SaasFeatureResource featureResourceById(Long featureId);
|
||||
|
||||
FeatureResourceTreeNode getTreeFeatureDescendant(Long featureId, Integer featureType);
|
||||
|
||||
/**菜单重排序**/
|
||||
void reorderMenuFeature(Long featureId, Integer offset);
|
||||
|
||||
/** 根据ID查询导航菜单页面信息 仅可显示 - 限制查询字段 **/
|
||||
List<SaasFeatureResource> listNavByIds(List<Long> featureIds, List<Integer> featureTypes);
|
||||
|
||||
/** 资源权限通用查询 **/
|
||||
List<ResourcePermission> permissionQuery(ResourcePermissionQueryDTO param);
|
||||
|
||||
/** 查询资源树 **/
|
||||
List<FeatureResourceTreeNode> getTree(GetFeatureResourceTreeReq req);
|
||||
|
||||
SaasFeatureResource getByCode(String featureCode);
|
||||
|
||||
Set<Long> listAuthFree();
|
||||
|
||||
List<SaasFeatureResource> listByParentIdAndTerminalAndIds(Long parentId, String terminal, List<Long> featureIds);
|
||||
|
||||
List<SaasFeatureResourceResp> list(PageSaasFeatureResourceReq param);
|
||||
|
||||
PageResp<SaasFeatureResourceResp> page(PageSaasFeatureResourceReq param);
|
||||
|
||||
void deleteFeatureResource(DeleteFeatureResourceReq param);
|
||||
|
||||
void storeCache(StoreSaasFeatureResourceCache param);
|
||||
|
||||
Map<String, List<SaasFeatureResourceCache>> listCache(ListSaasFeatureResourceCache param);
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class StoreSaasFeatureResourceCache {
|
||||
|
||||
private List<SaasFeatureResourceDTO> saasFeatureResources;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class SaasFeatureResourceDTO {
|
||||
private String terminal;
|
||||
|
||||
private List<SaasFeatureResourceCache> features;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class ListSaasFeatureResourceCache {
|
||||
|
||||
private Set<String> terminals;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class SaasFeatureResourceCache {
|
||||
|
||||
private Long featureId;
|
||||
|
||||
private boolean notAuth;
|
||||
|
||||
private Set<Long> parentIds;
|
||||
|
||||
private String uniCode;
|
||||
|
||||
/**
|
||||
* 客户端版本号
|
||||
* 在根据版本号查询菜单树权限的时候需要
|
||||
*/
|
||||
private Integer version;
|
||||
}
|
||||
}
|
||||
package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.tyr.client.model.req.DeleteFeatureResourceReq;
|
||||
import cn.axzo.tyr.client.model.req.FeatureResourceTreeSaveReq;
|
||||
import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
|
||||
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
|
||||
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
|
||||
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
||||
import cn.axzo.tyr.server.model.ResourcePermission;
|
||||
import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 功能资源服务
|
||||
*
|
||||
* @version V1.0
|
||||
* @author: ZhanSiHu
|
||||
* @date: 2024/4/3 10:17
|
||||
*/
|
||||
public interface SaasFeatureResourceService extends IService<SaasFeatureResource> {
|
||||
|
||||
Long saveOrUpdateMenu(FeatureResourceTreeSaveReq req);
|
||||
|
||||
void updateFeatureAuthType(Long featureId, Integer authType);
|
||||
|
||||
/**递归的**/
|
||||
List<SaasFeatureResource> batchListDescendant(List<Long> featureIds);
|
||||
|
||||
SaasFeatureResource featureResourceById(Long featureId);
|
||||
|
||||
FeatureResourceTreeNode getTreeFeatureDescendant(Long featureId, Integer featureType);
|
||||
|
||||
/**菜单重排序**/
|
||||
void reorderMenuFeature(Long featureId, Integer offset);
|
||||
|
||||
/** 根据ID查询导航菜单页面信息 仅可显示 - 限制查询字段 **/
|
||||
List<SaasFeatureResource> listNavByIds(List<Long> featureIds, List<Integer> featureTypes);
|
||||
|
||||
/** 资源权限通用查询 **/
|
||||
List<ResourcePermission> permissionQuery(ResourcePermissionQueryDTO param);
|
||||
|
||||
/** 查询资源树 **/
|
||||
List<FeatureResourceTreeNode> getTree(GetFeatureResourceTreeReq req);
|
||||
|
||||
SaasFeatureResource getByCode(String featureCode);
|
||||
|
||||
Set<Long> listAuthFree();
|
||||
|
||||
List<SaasFeatureResource> listByParentIdAndTerminalAndIds(Long parentId, String terminal, List<Long> featureIds);
|
||||
|
||||
List<SaasFeatureResourceResp> list(PageSaasFeatureResourceReq param);
|
||||
|
||||
PageResp<SaasFeatureResourceResp> page(PageSaasFeatureResourceReq param);
|
||||
|
||||
void deleteFeatureResource(DeleteFeatureResourceReq param);
|
||||
|
||||
void storeCache(StoreSaasFeatureResourceCache param);
|
||||
|
||||
Map<String, List<SaasFeatureResourceCache>> listCache(ListSaasFeatureResourceCache param);
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class StoreSaasFeatureResourceCache {
|
||||
|
||||
private List<SaasFeatureResourceDTO> saasFeatureResources;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class SaasFeatureResourceDTO {
|
||||
private String terminal;
|
||||
|
||||
private List<SaasFeatureResourceCache> features;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class ListSaasFeatureResourceCache {
|
||||
|
||||
private Set<String> terminals;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class SaasFeatureResourceCache {
|
||||
|
||||
private Long featureId;
|
||||
|
||||
private boolean notAuth;
|
||||
|
||||
private Set<Long> parentIds;
|
||||
|
||||
private String uniCode;
|
||||
|
||||
/**
|
||||
* 客户端版本号
|
||||
* 在根据版本号查询菜单树限的时候需要
|
||||
*/
|
||||
private Integer version;
|
||||
|
||||
/**
|
||||
* 1、展示
|
||||
* 0、隐藏
|
||||
* FeatureResourceStatus
|
||||
*/
|
||||
private Integer status;
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,6 +13,7 @@ import cn.axzo.thrones.client.saas.ServicePkgClient;
|
||||
import cn.axzo.thrones.client.saas.entity.serivicepgkproduct.ServicePkgProduct;
|
||||
import cn.axzo.thrones.client.saas.entity.servicepkg.ServicePkgDetailRes;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceAuthType;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceStatus;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
|
||||
import cn.axzo.tyr.client.model.base.FeatureResourceExtraDO;
|
||||
@ -523,6 +524,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
|
||||
.uniCodes(req.getUniCodes())
|
||||
.versionMax(req.getVersionMax())
|
||||
.parentUniCode(req.getParentUniCode())
|
||||
.status(req.getStatus())
|
||||
.build();
|
||||
Set<Long> featureIds = listUserPermissionFeatureIds(treePermissionReq);
|
||||
|
||||
@ -839,6 +841,18 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
|
||||
|| treePermissionReq.getVersionMax().compareTo(f.getVersion()) > -1)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 查询显示的菜单,需要过滤掉隐藏的节点,如果父节点隐藏,则下面所有子节点也需要过滤掉
|
||||
if (Objects.equals(treePermissionReq.getStatus(), FeatureResourceStatus.NORMAL)) {
|
||||
Set<Long> normalFeatureIds = allFeatureResources.stream()
|
||||
.filter(e -> Objects.equals(e.getStatus(), FeatureResourceStatus.NORMAL.getCode()))
|
||||
.map(SaasFeatureResourceService.SaasFeatureResourceCache::getFeatureId)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
allFeatureResources = allFeatureResources.stream()
|
||||
.filter(e -> normalFeatureIds.contains(e.getFeatureId()) && normalFeatureIds.containsAll(e.getParentIds()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(treePermissionReq.getParentUniCode())) {
|
||||
return allFeatureResources;
|
||||
}
|
||||
@ -847,7 +861,8 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
|
||||
.filter(e -> Objects.equals(e.getUniCode(), treePermissionReq.getParentUniCode()))
|
||||
.map(SaasFeatureResourceService.SaasFeatureResourceCache::getFeatureId)
|
||||
.findFirst();
|
||||
return parentId.map(aLong -> allFeatureResources.stream()
|
||||
final List<SaasFeatureResourceService.SaasFeatureResourceCache> finalFeatureResources = allFeatureResources;
|
||||
return parentId.map(aLong -> finalFeatureResources.stream()
|
||||
.filter(e -> e.getParentIds().contains(aLong))
|
||||
.collect(Collectors.toList()))
|
||||
.orElse(Collections.emptyList());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user