diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/DetailFeatureResourceReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/DetailFeatureResourceReq.java index 5b8b9b0c..7a6ac981 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/DetailFeatureResourceReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/DetailFeatureResourceReq.java @@ -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 tags; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListRoleReq.java index 3b05af9a..71e01fbd 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListRoleReq.java @@ -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 permissionTags; + /** * 是否需要角色对应的角色分组信息 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PagePgroupPermissionRelationReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PagePgroupPermissionRelationReq.java index 3039feb2..a3d554af 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PagePgroupPermissionRelationReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PagePgroupPermissionRelationReq.java @@ -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 featureIdPairs; + + @CriteriaField(ignore = true) + private Set tags; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasPermissionRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasPermissionRes.java index 2cf6fc65..c43a5415 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasPermissionRes.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SaasPermissionRes.java @@ -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 tags; + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 572963c6..81500290 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -1430,38 +1430,37 @@ public class RoleServiceImpl extends ServiceImpl return Collections.emptyMap(); } - List 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 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 resourcePermissions = saasFeatureResourceService.permissionQuery(ResourcePermissionQueryDTO.builder() + Map 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> pgroupPermissions = saasPgroupPermissionRelations.stream() - .collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getGroupId, - Collectors.mapping(SaasPgroupPermissionRelation::getFeatureId, Collectors.toList()))); + Map> pgroupPermissions = saasPgroupPermissionRelations.stream() + .collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getGroupId)); return saasPgroupRoleRelations.stream() .map(e -> { - List permissionIds = pgroupPermissions.get(e.getGroupId()); - if (CollectionUtils.isEmpty(permissionIds)) { + List 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 .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 private Long roleId; + private Set 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 .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 return Collections.emptyMap(); } - List 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 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 featureIds = Lists.transform(saasPgroupPermissionRelations, SaasPgroupPermissionRelation::getFeatureId); - Map 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 resourcePermissions = saasFeatureDao.listByIds(featureIds).stream() + .collect(Collectors.toMap(SaasFeature::getId, Function.identity())); - Map> pgroupPermissions = saasPgroupPermissionRelations.stream() - .collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getGroupId, - Collectors.mapping(SaasPgroupPermissionRelation::getFeatureId, Collectors.toList()))); + Map> pgroupPermissions = saasPgroupPermissionRelations.stream() + .collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getGroupId)); return saasPgroupRoleRelations.stream() .map(e -> { - List permissionIds = pgroupPermissions.get(e.getGroupId()); - if (CollectionUtils.isEmpty(permissionIds)) { + List 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()); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java index 41b6fe1a..a43bd4ff 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java @@ -260,6 +260,7 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl relations = saasPgroupPermissionRelationService.list(PagePgroupPermissionRelationReq.builder() .featureIds(Lists.transform(descendants, SaasFeatureResource::getId)) + .tags(detailFeatureResourceReq.getTags()) .build()); if (CollectionUtils.isEmpty(relations)) { return Collections.emptyMap(); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java index 92a3a2e3..4b71e09f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java @@ -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 page = this.page(PageConverter.toMybatis(param, SaasPgroupPermissionRelation.class), wrapper);