feat: (feature/REQ-2595) 角色查询、菜单查询支持权限tags过滤
This commit is contained in:
parent
0d18367995
commit
8ab50f4cb9
@ -1,11 +1,13 @@
|
||||
package cn.axzo.tyr.client.model.req;
|
||||
|
||||
import cn.axzo.tyr.client.model.enums.RolePermissionTagEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@ -26,4 +28,9 @@ public class DetailFeatureResourceReq {
|
||||
private Boolean needChildren;
|
||||
|
||||
private Boolean needPageElement;
|
||||
|
||||
/**
|
||||
* 只有当needRole = true才有效果,这里查询有指定标签权限的角色信息
|
||||
*/
|
||||
private Set<RolePermissionTagEnum> tags;
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ 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.tyr.client.common.enums.FeatureResourceType;
|
||||
import cn.axzo.tyr.client.model.enums.RolePermissionTagEnum;
|
||||
import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@ -80,6 +81,13 @@ public class ListRoleReq {
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean needPermission;
|
||||
|
||||
/**
|
||||
* 根据权限标签去过滤角色对应的权限,
|
||||
* 只有在needPermission = true时才生效
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private Set<RolePermissionTagEnum> permissionTags;
|
||||
|
||||
/**
|
||||
* 是否需要角色对应的角色分组信息
|
||||
*/
|
||||
|
||||
@ -4,12 +4,14 @@ 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.tyr.client.common.enums.FeatureResourceType;
|
||||
import cn.axzo.tyr.client.model.enums.RolePermissionTagEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@ -58,4 +60,7 @@ public class PagePgroupPermissionRelationReq implements IPageReq {
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private List<FeatureIdPair> featureIdPairs;
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
private Set<RolePermissionTagEnum> tags;
|
||||
}
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
package cn.axzo.tyr.client.model.res;
|
||||
|
||||
import cn.axzo.tyr.client.model.enums.RolePermissionTagEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@ -23,4 +26,6 @@ public class SaasPermissionRes {
|
||||
*/
|
||||
private String terminal;
|
||||
|
||||
private Set<RolePermissionTagEnum> tags;
|
||||
|
||||
}
|
||||
|
||||
@ -1430,38 +1430,37 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
List<SaasPgroupPermissionRelation> saasPgroupPermissionRelations = saasPgroupPermissionRelationDao.lambdaQuery()
|
||||
.in(SaasPgroupPermissionRelation::getGroupId, Lists.transform(saasPgroupRoleRelations, SaasPgroupRoleRelation::getGroupId))
|
||||
.eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||
.in(CollectionUtils.isNotEmpty(param.getFeatureIds()), SaasPgroupPermissionRelation::getFeatureId, param.getFeatureIds())
|
||||
.eq(SaasPgroupPermissionRelation::getType, NEW_FEATURE)
|
||||
.list();
|
||||
List<SaasPgroupPermissionRelation> saasPgroupPermissionRelations = saasPgroupPermissionRelationService.list(PagePgroupPermissionRelationReq.builder()
|
||||
.groupIds(Lists.transform(saasPgroupRoleRelations, SaasPgroupRoleRelation::getGroupId))
|
||||
.featureIds(param.getFeatureIds())
|
||||
.type(NEW_FEATURE)
|
||||
.tags(param.getPermissionTags())
|
||||
.terminal(param.getTerminal())
|
||||
.build());
|
||||
if (CollectionUtils.isEmpty(saasPgroupPermissionRelations)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
Map<Long, SaasPermissionRes> resourcePermissions = saasFeatureResourceService.permissionQuery(ResourcePermissionQueryDTO.builder()
|
||||
Map<Long, ResourcePermission> resourcePermissions = saasFeatureResourceService.permissionQuery(ResourcePermissionQueryDTO.builder()
|
||||
.ids(Lists.transform(saasPgroupPermissionRelations, SaasPgroupPermissionRelation::getFeatureId))
|
||||
.build())
|
||||
.stream()
|
||||
.map(e -> SaasPermissionRes.builder().id(e.getId()).featureCode(e.getFeatureCode()).build())
|
||||
.collect(Collectors.toMap(SaasPermissionRes::getId, Function.identity()));
|
||||
.collect(Collectors.toMap(ResourcePermission::getId, Function.identity()));
|
||||
|
||||
Map<Long, List<Long>> pgroupPermissions = saasPgroupPermissionRelations.stream()
|
||||
.collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getGroupId,
|
||||
Collectors.mapping(SaasPgroupPermissionRelation::getFeatureId, Collectors.toList())));
|
||||
Map<Long, List<SaasPgroupPermissionRelation>> pgroupPermissions = saasPgroupPermissionRelations.stream()
|
||||
.collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getGroupId));
|
||||
|
||||
return saasPgroupRoleRelations.stream()
|
||||
.map(e -> {
|
||||
List<Long> permissionIds = pgroupPermissions.get(e.getGroupId());
|
||||
if (CollectionUtils.isEmpty(permissionIds)) {
|
||||
List<SaasPgroupPermissionRelation> permissions = pgroupPermissions.get(e.getGroupId());
|
||||
if (CollectionUtils.isEmpty(permissions)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return permissionIds.stream()
|
||||
.map(permissionId -> {
|
||||
SaasPermissionRes saasPermissionRes = resourcePermissions.get(permissionId);
|
||||
return SaasPermissionWrapper.from(e, saasPermissionRes);
|
||||
return permissions.stream()
|
||||
.map(permission -> {
|
||||
ResourcePermission saasPermissionRes = resourcePermissions.get(permission.getFeatureId());
|
||||
return SaasPermissionWrapper.from(e, saasPermissionRes, permission);
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
@ -1469,7 +1468,12 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
.filter(Objects::nonNull)
|
||||
.flatMap(Collection::stream)
|
||||
.collect(Collectors.groupingBy(SaasPermissionWrapper::getRoleId,
|
||||
Collectors.mapping(e -> SaasPermissionRes.builder().id(e.getId()).featureCode(e.getFeatureCode()).build(),
|
||||
Collectors.mapping(e -> SaasPermissionRes.builder()
|
||||
.id(e.getId())
|
||||
.featureCode(e.getFeatureCode())
|
||||
.tags(e.getTags())
|
||||
.terminal(e.getTerminal())
|
||||
.build(),
|
||||
Collectors.toList())));
|
||||
|
||||
}
|
||||
@ -1489,8 +1493,16 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
|
||||
private Long roleId;
|
||||
|
||||
private Set<RolePermissionTagEnum> tags;
|
||||
|
||||
/**
|
||||
* 资源所属端
|
||||
*/
|
||||
private String terminal;
|
||||
|
||||
public static SaasPermissionWrapper from(SaasPgroupRoleRelation saasPgroupRoleRelation,
|
||||
SaasPermissionRes saasPermissionRes) {
|
||||
ResourcePermission saasPermissionRes,
|
||||
SaasPgroupPermissionRelation saasPgroupPermissionRelation) {
|
||||
if (saasPermissionRes == null) {
|
||||
return null;
|
||||
}
|
||||
@ -1498,6 +1510,8 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
.id(saasPermissionRes.getId())
|
||||
.featureCode(saasPermissionRes.getFeatureCode())
|
||||
.roleId(saasPgroupRoleRelation.getRoleId())
|
||||
.tags(saasPgroupPermissionRelation.getTags())
|
||||
.terminal(saasPermissionRes.getTerminal())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@ -1730,41 +1744,45 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
List<SaasPgroupPermissionRelation> saasPgroupPermissionRelations = saasPgroupPermissionRelationDao.lambdaQuery()
|
||||
.in(SaasPgroupPermissionRelation::getGroupId, Lists.transform(saasPgroupRoleRelations, SaasPgroupRoleRelation::getGroupId))
|
||||
.in(CollectionUtils.isNotEmpty(param.getFeatureIds()), SaasPgroupPermissionRelation::getFeatureId, param.getFeatureIds())
|
||||
.eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||
.eq(SaasPgroupPermissionRelation::getType, OLD_FEATURE)
|
||||
.list();
|
||||
List<SaasPgroupPermissionRelation> saasPgroupPermissionRelations = saasPgroupPermissionRelationService.list(PagePgroupPermissionRelationReq.builder()
|
||||
.groupIds(Lists.transform(saasPgroupRoleRelations, SaasPgroupRoleRelation::getGroupId))
|
||||
.featureIds(param.getFeatureIds())
|
||||
.type(OLD_FEATURE)
|
||||
.tags(param.getPermissionTags())
|
||||
.build());
|
||||
if (CollectionUtils.isEmpty(saasPgroupPermissionRelations)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
List<Long> featureIds = Lists.transform(saasPgroupPermissionRelations, SaasPgroupPermissionRelation::getFeatureId);
|
||||
|
||||
Map<Long, SaasPermissionRes> resourcePermissions = saasFeatureDao.listByIds(featureIds).stream()
|
||||
.map(e -> SaasPermissionRes.builder()
|
||||
.id(e.getId())
|
||||
.featureCode(e.getFeatureCode())
|
||||
.terminal(e.getTerminal())
|
||||
.build())
|
||||
.collect(Collectors.toMap(SaasPermissionRes::getId, Function.identity()));
|
||||
Map<Long, SaasFeature> resourcePermissions = saasFeatureDao.listByIds(featureIds).stream()
|
||||
.collect(Collectors.toMap(SaasFeature::getId, Function.identity()));
|
||||
|
||||
Map<Long, List<Long>> pgroupPermissions = saasPgroupPermissionRelations.stream()
|
||||
.collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getGroupId,
|
||||
Collectors.mapping(SaasPgroupPermissionRelation::getFeatureId, Collectors.toList())));
|
||||
Map<Long, List<SaasPgroupPermissionRelation>> pgroupPermissions = saasPgroupPermissionRelations.stream()
|
||||
.collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getGroupId));
|
||||
|
||||
return saasPgroupRoleRelations.stream()
|
||||
.map(e -> {
|
||||
List<Long> permissionIds = pgroupPermissions.get(e.getGroupId());
|
||||
if (CollectionUtils.isEmpty(permissionIds)) {
|
||||
List<SaasPgroupPermissionRelation> permissions = pgroupPermissions.get(e.getGroupId());
|
||||
if (CollectionUtils.isEmpty(permissions)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return permissionIds.stream()
|
||||
.map(permissionId -> {
|
||||
SaasPermissionRes saasPermissionRes = resourcePermissions.get(permissionId);
|
||||
return SaasPermissionWrapper.from(e, saasPermissionRes);
|
||||
return permissions.stream()
|
||||
.map(permission -> {
|
||||
SaasFeature saasFeature = resourcePermissions.get(permission.getFeatureId());
|
||||
|
||||
if (Objects.isNull(saasFeature)) {
|
||||
return null;
|
||||
}
|
||||
return SaasPermissionWrapper.builder()
|
||||
.id(saasFeature.getId())
|
||||
.featureCode(saasFeature.getFeatureCode())
|
||||
.roleId(e.getRoleId())
|
||||
.terminal(saasFeature.getTerminal())
|
||||
.tags(permission.getTags())
|
||||
.build();
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@ -260,6 +260,7 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
|
||||
|
||||
List<SaasPgroupPermissionRelation> relations = saasPgroupPermissionRelationService.list(PagePgroupPermissionRelationReq.builder()
|
||||
.featureIds(Lists.transform(descendants, SaasFeatureResource::getId))
|
||||
.tags(detailFeatureResourceReq.getTags())
|
||||
.build());
|
||||
if (CollectionUtils.isEmpty(relations)) {
|
||||
return Collections.emptyMap();
|
||||
|
||||
@ -4,8 +4,8 @@ import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
|
||||
import cn.axzo.foundation.dao.support.converter.PageConverter;
|
||||
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.framework.auth.domain.TerminalInfo;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||
import cn.axzo.tyr.client.model.enums.RolePermissionTagEnum;
|
||||
import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq;
|
||||
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
|
||||
@ -84,10 +84,15 @@ public class SaasPgroupPermissionRelationServiceImpl
|
||||
|
||||
// 目前只有新版本的CMS端产品配置时才冗余了terminal
|
||||
if (Objects.equals(NEW_FEATURE, param.getType()) && StringUtils.hasLength(param.getTerminal())) {
|
||||
TerminalInfo terminalInfo = new TerminalInfo(param.getTerminal());
|
||||
if (terminalInfo.isCMS()) {
|
||||
wrapper.eq("terminal", param.getTerminal());
|
||||
}
|
||||
wrapper.eq("terminal", param.getTerminal());
|
||||
}
|
||||
|
||||
if (CollectionUtils.isNotEmpty(param.getTags())) {
|
||||
wrapper.and(j -> {
|
||||
for (RolePermissionTagEnum tag : param.getTags()) {
|
||||
j.or(k -> k.apply("json_contains(tags, '\"" + tag + "\"')"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
IPage<SaasPgroupPermissionRelation> page = this.page(PageConverter.toMybatis(param, SaasPgroupPermissionRelation.class), wrapper);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user