feat:(REQ-2720) 修改旧菜单树缓存,因为没有把父节点的权限存储起来,但是实际有权限

This commit is contained in:
lilong 2024-08-01 16:11:52 +08:00
parent 58bf864ac2
commit 6e45898d3b
5 changed files with 45 additions and 26 deletions

View File

@ -37,6 +37,11 @@ public class SimplePermissionPointResp implements IBaseTree<SimplePermissionPoin
/** 上级权限点ID **/
private Long parentId;
/**
* 类型 0.模块 1.菜单 2页面 3功能
*/
private Integer featureType;
/** 子节点 **/
private List<SimplePermissionPointResp> children;

View File

@ -5,11 +5,12 @@ 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.QueryPermissionByIdsReq;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.client.model.res.SimplePermissionPointResp;
import cn.axzo.tyr.server.event.payload.ProductPermissionCreatedPayload;
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
import cn.axzo.tyr.server.service.PermissionPointService;
import cn.axzo.tyr.server.service.ProductFeatureRelationService;
import cn.axzo.tyr.server.service.ProductPermissionCacheService;
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
@ -50,7 +51,7 @@ public class CacheProductPermissionHandler implements EventHandler, Initializing
@Autowired
private SaasFeatureResourceService saasFeatureResourceService;
@Autowired
private SaasFeatureDao saasFeatureDao;
private PermissionPointService permissionPointService;
@Override
public void onEvent(Event event, EventConsumer.Context context) {
@ -94,9 +95,11 @@ public class CacheProductPermissionHandler implements EventHandler, Initializing
return Collections.emptyList();
}
// 新的菜单树是是把有权限点的父节点也存进去了所以直接解析
Map<Long, SaasFeatureResourceResp> featureResources = listSaasFeatureResource(productPermissions);
Map<Long, SaasFeature> saasFeatures = listSaasFeature(productPermissions);
// 旧的菜单树只存储了权限点信息没有把父节点存进去需要解析父节点进行存储
Map<Long, SimplePermissionPointResp> saasFeatures = listSaasFeature(productPermissions);
return productPermissions.stream()
.collect(Collectors.groupingBy(SaasProductModuleFeatureRelation::getProductModuleId))
@ -135,14 +138,14 @@ public class CacheProductPermissionHandler implements EventHandler, Initializing
.collect(Collectors.toList());
}
SaasFeature saasFeature = saasFeatures.get(relation.getFeatureId());
SimplePermissionPointResp saasFeature = saasFeatures.get(relation.getFeatureId());
if (Objects.isNull(saasFeature)) {
return null;
}
return Lists.newArrayList(ProductPermissionCacheService.PermissionDTO.builder()
.featureId(saasFeature.getId())
.featureCode(saasFeature.getFeatureCode())
.featureCode(saasFeature.getCode())
.featureType(saasFeature.getFeatureType())
.terminal(saasFeature.getTerminal())
.cooperateType(relation.getDictCode())
@ -187,19 +190,23 @@ public class CacheProductPermissionHandler implements EventHandler, Initializing
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity()));
}
private Map<Long, SaasFeature> listSaasFeature(List<SaasProductModuleFeatureRelation> productPermissions) {
private Map<Long, SimplePermissionPointResp> listSaasFeature(List<SaasProductModuleFeatureRelation> productPermissions) {
List<Long> featureIds = productPermissions.stream()
Set<Long> featureIds = productPermissions.stream()
.filter(e -> Objects.equals(e.getType(), OLD_FEATURE))
.map(SaasProductModuleFeatureRelation::getFeatureId)
.distinct()
.collect(Collectors.toList());
.collect(Collectors.toSet());
if (CollectionUtils.isEmpty(featureIds)) {
return Collections.emptyMap();
}
return saasFeatureDao.listByIds(featureIds).stream()
.collect(Collectors.toMap(SaasFeature::getId, Function.identity()));
return permissionPointService.listPermissionByIds(
QueryPermissionByIdsReq.builder()
.ids(featureIds)
.includeParent(true)
.build())
.stream()
.collect(Collectors.toMap(SimplePermissionPointResp::getId, Function.identity()));
}
}

View File

@ -4,12 +4,13 @@ import cn.axzo.framework.rocketmq.Event;
import cn.axzo.framework.rocketmq.EventConsumer;
import cn.axzo.framework.rocketmq.EventHandler;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.req.QueryPermissionByIdsReq;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.client.model.res.SaasPermissionRelationRes;
import cn.axzo.tyr.client.model.res.SaasRoleRes;
import cn.axzo.tyr.client.model.res.SimplePermissionPointResp;
import cn.axzo.tyr.server.event.payload.RolePermissionCreatedPayload;
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.service.PermissionPointService;
import cn.axzo.tyr.server.service.RolePermissionCacheService;
import cn.axzo.tyr.server.service.RoleService;
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
@ -50,7 +51,7 @@ public class CacheRolePermissionHandler implements EventHandler, InitializingBea
@Autowired
private SaasFeatureResourceService saasFeatureResourceService;
@Autowired
private SaasFeatureDao saasFeatureDao;
private PermissionPointService permissionPointService;
@Override
public void onEvent(Event event, EventConsumer.Context context) {
@ -94,7 +95,7 @@ public class CacheRolePermissionHandler implements EventHandler, InitializingBea
Map<Long, SaasFeatureResourceResp> featureResources = listSaasFeatureResource(roles);
Map<Long, SaasFeature> saasFeatures = listSaasFeature(roles);
Map<Long, SimplePermissionPointResp> saasFeatures = listSaasFeature(roles);
return roles.stream()
.map(e -> {
@ -127,13 +128,13 @@ public class CacheRolePermissionHandler implements EventHandler, InitializingBea
.build())
.collect(Collectors.toList());
}
SaasFeature saasFeature = saasFeatures.get(permissionRelation.getFeatureId());
SimplePermissionPointResp saasFeature = saasFeatures.get(permissionRelation.getFeatureId());
if (Objects.isNull(saasFeature)) {
return null;
}
return Lists.newArrayList(RolePermissionCacheService.PermissionDTO.builder()
.featureId(saasFeature.getId())
.featureCode(saasFeature.getFeatureCode())
.featureCode(saasFeature.getCode())
.featureType(saasFeature.getFeatureType())
.terminal(saasFeature.getTerminal())
.build());
@ -180,22 +181,26 @@ public class CacheRolePermissionHandler implements EventHandler, InitializingBea
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity()));
}
private Map<Long, SaasFeature> listSaasFeature(List<SaasRoleRes> roles) {
private Map<Long, SimplePermissionPointResp> listSaasFeature(List<SaasRoleRes> roles) {
List<Long> featureIds = roles.stream()
Set<Long> featureIds = roles.stream()
.filter(e -> !CollectionUtils.isEmpty(e.getPermissionRelations()))
.map(SaasRoleRes::getPermissionRelations)
.flatMap(Collection::stream)
.filter(e -> Objects.equals(e.getType(), OLD_FEATURE))
.map(SaasPermissionRelationRes::getFeatureId)
.distinct()
.collect(Collectors.toList());
.collect(Collectors.toSet());
if (CollectionUtils.isEmpty(featureIds)) {
return Collections.emptyMap();
}
return saasFeatureDao.listByIds(featureIds).stream()
.collect(Collectors.toMap(SaasFeature::getId, Function.identity()));
return permissionPointService.listPermissionByIds(
QueryPermissionByIdsReq.builder()
.ids(featureIds)
.includeParent(true)
.build())
.stream()
.collect(Collectors.toMap(SimplePermissionPointResp::getId, Function.identity()));
}
}

View File

@ -634,7 +634,8 @@ public class PermissionPointServiceImpl implements PermissionPointService {
SaasFeature::getFeatureName,
SaasFeature::getParentId,
SaasFeature::getPath,
SaasFeature::getTerminal));
SaasFeature::getTerminal,
SaasFeature::getFeatureType));
Set<Long> parentIds = new HashSet<>();
for (SaasFeature permission : allPermissions) {
@ -672,6 +673,7 @@ public class PermissionPointServiceImpl implements PermissionPointService {
.name(permission.getFeatureName())
.parentId(permission.getParentId())
.terminal(permission.getTerminal())
.featureType(permission.getFeatureType())
.build();
}

View File

@ -159,7 +159,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
private final RolePermissionCacheService rolePermissionCacheService;
private final SaasRoleUserRelationMapper saasRoleUserRelationMapper;
@Value("${permission.from.db:false}")
@Value("${permission.from.db:true}")
private boolean PERMISSION_FROM_DB;
@Override