From 934609e657c7c1ffe26a77ed2dd2c2fc0725f938 Mon Sep 17 00:00:00 2001 From: luofu Date: Tue, 30 Jul 2024 14:23:15 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat(REQ-2488):=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/req/ListRoleReq.java | 7 +++++++ .../java/cn/axzo/tyr/server/service/RoleService.java | 8 ++++++++ .../axzo/tyr/server/service/impl/RoleServiceImpl.java | 11 ++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) 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 20688036..5021f8dc 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 @@ -1,5 +1,6 @@ package cn.axzo.tyr.client.model.req; +import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -72,4 +73,10 @@ public class ListRoleReq { * 是否需要角色对应的用户信息 */ private Boolean needRoleUser; + + /** + * workspaceId和ouId配对查询 + * 例如:((workspaceId = ## and ouId = ##) or (workspaceId = ## and ouId = ##)) + */ + private List workspaceOuPairs; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index bf464d0d..144d613d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -19,6 +19,7 @@ import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.res.QueryRoleByNameResp; import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.client.model.res.SaasRoleRes; +import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; import cn.axzo.tyr.client.model.vo.DeleteRoleVO; import cn.axzo.tyr.client.model.vo.SaasRoleAndGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO; @@ -183,6 +184,13 @@ public interface RoleService extends IService { */ @CriteriaField(ignore = true) private String terminal; + + /** + * workspaceId和ouId配对查询 + * 例如:((workspaceId = ## and ouId = ##) or (workspaceId = ## and ouId = ##)) + */ + @CriteriaField(ignore = true) + private List workspaceOuPairs; } @SuperBuilder 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 15860b22..7784312a 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 @@ -1137,7 +1137,16 @@ public class RoleServiceImpl extends ServiceImpl public cn.axzo.foundation.page.PageResp page(PageSaasRoleParam param) { QueryWrapper wrapper = QueryWrapperHelper.fromBean(param, SaasRole.class); wrapper.eq("is_delete", 0); - + if (CollectionUtils.isNotEmpty(param.getWorkspaceOuPairs())) { + wrapper.and(j -> { + for (ListRoleUserRelationParam.WorkspaceOuPair workspaceOuPair : param.getWorkspaceOuPairs()) { + j.or(k -> { + k.eq(Objects.nonNull(workspaceOuPair.getOuId()), "ou_id", workspaceOuPair.getOuId()); + k.eq(Objects.nonNull(workspaceOuPair.getWorkspaceId()), "workspace_id", workspaceOuPair.getWorkspaceId()); + }); + } + }); + } IPage page = this.page(PageConverter.toMybatis(param, SaasRole.class), wrapper); Map> saasRoleGroups = listRoleGroups(param, page.getRecords()); From 3998210c6ff92276777cddeae1c2b38d34025a98 Mon Sep 17 00:00:00 2001 From: luofu Date: Tue, 30 Jul 2024 16:28:18 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat(REQ-2488):=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/client/model/req/ListRoleReq.java | 4 ++++ .../cn/axzo/tyr/server/service/RoleService.java | 6 ++++++ .../tyr/server/service/impl/RoleServiceImpl.java | 16 ++++++++++++++-- 3 files changed, 24 insertions(+), 2 deletions(-) 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 5021f8dc..5817a704 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 @@ -73,6 +73,10 @@ public class ListRoleReq { * 是否需要角色对应的用户信息 */ private Boolean needRoleUser; + /** + * 是否需要预设角色,因为预设角色的workspaceId和ouId为-1 + */ + private Boolean needPresetRole; /** * workspaceId和ouId配对查询 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index 144d613d..7e1f5c7b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -167,6 +167,12 @@ public interface RoleService extends IService { @CriteriaField(ignore = true) private Boolean needPermissionRelation; + /** + * 是否需要预设角色,因为预设角色的workspaceId和ouId为-1 + */ + @CriteriaField(ignore = true) + private Boolean needPresetRole; + /** * 查询菜单树节点类型 */ 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 7784312a..8f8f0a7a 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 @@ -110,6 +110,11 @@ import static cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation. public class RoleServiceImpl extends ServiceImpl implements RoleService { + private static final ListRoleUserRelationParam.WorkspaceOuPair PRESET_WORKSPACE_OU_PAIR = ListRoleUserRelationParam.WorkspaceOuPair.builder() + .ouId(-1L) + .workspaceId(-1L) + .build(); + @Autowired SaasRoleUserRelationDao roleUserRelationDao; @Autowired @@ -1137,9 +1142,16 @@ public class RoleServiceImpl extends ServiceImpl public cn.axzo.foundation.page.PageResp page(PageSaasRoleParam param) { QueryWrapper wrapper = QueryWrapperHelper.fromBean(param, SaasRole.class); wrapper.eq("is_delete", 0); - if (CollectionUtils.isNotEmpty(param.getWorkspaceOuPairs())) { + List workspaceOuPairs = Lists.newArrayList(); + if (Boolean.TRUE.equals(param.getNeedPresetRole())) { + workspaceOuPairs.add(PRESET_WORKSPACE_OU_PAIR); + } + CollectionUtils.addAll(workspaceOuPairs, Optional.ofNullable(param.getWorkspaceOuPairs()) + .map(List::listIterator) + .orElseGet(Collections::emptyListIterator)); + if (CollectionUtils.isNotEmpty(workspaceOuPairs)) { wrapper.and(j -> { - for (ListRoleUserRelationParam.WorkspaceOuPair workspaceOuPair : param.getWorkspaceOuPairs()) { + for (ListRoleUserRelationParam.WorkspaceOuPair workspaceOuPair : workspaceOuPairs) { j.or(k -> { k.eq(Objects.nonNull(workspaceOuPair.getOuId()), "ou_id", workspaceOuPair.getOuId()); k.eq(Objects.nonNull(workspaceOuPair.getWorkspaceId()), "workspace_id", workspaceOuPair.getWorkspaceId()); From e51cb3cf2f6e02c62bbe7070cd295edf650c2f5f Mon Sep 17 00:00:00 2001 From: luofu Date: Wed, 31 Jul 2024 10:41:56 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat(REQ-2488):=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8f8f0a7a..1cca8a90 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 @@ -1153,7 +1153,7 @@ public class RoleServiceImpl extends ServiceImpl wrapper.and(j -> { for (ListRoleUserRelationParam.WorkspaceOuPair workspaceOuPair : workspaceOuPairs) { j.or(k -> { - k.eq(Objects.nonNull(workspaceOuPair.getOuId()), "ou_id", workspaceOuPair.getOuId()); + k.eq(Objects.nonNull(workspaceOuPair.getOuId()), "owner_ou_id", workspaceOuPair.getOuId()); k.eq(Objects.nonNull(workspaceOuPair.getWorkspaceId()), "workspace_id", workspaceOuPair.getWorkspaceId()); }); } From 4f3daf8adff218792d3ae1ef2b3a9c9357a4142e Mon Sep 17 00:00:00 2001 From: luofu Date: Thu, 1 Aug 2024 14:54:14 +0800 Subject: [PATCH 4/6] =?UTF-8?q?feat(REQ-2488):=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A7=92=E8=89=B2=E6=8E=A5=E5=8F=A3=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roleuser/req/ListRoleUserRelationParam.java | 12 ++++++++++++ .../impl/SaasRoleUserRelationServiceImpl.java | 2 ++ 2 files changed, 14 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java index d901dd58..3c7ba434 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java @@ -27,6 +27,18 @@ public class ListRoleUserRelationParam { @CriteriaField(field = "ouId", operator = Operator.EQ) private Long ouId; + /** + * 是否显示 + */ + @CriteriaField(ignore = true) + private Boolean isDisplay; + + /** + * 是否启用 + */ + @CriteriaField(ignore = true) + private Boolean enabled; + /** * 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java index c16cb012..fdcfb4a2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java @@ -236,6 +236,8 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl Date: Fri, 23 Aug 2024 11:07:29 +0800 Subject: [PATCH 5/6] =?UTF-8?q?feat:(REQ-2488)=20=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E6=94=AF?= =?UTF-8?q?=E6=8C=81roleId=E5=92=8CroleCodes=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/req/ListRoleReq.java | 6 ++++ .../req/ListRoleUserRelationParam.java | 7 +++++ .../req/PageRoleUserRelationParam.java | 11 +++++++ .../axzo/tyr/server/service/RoleService.java | 6 ++++ .../impl/SaasRoleUserRelationServiceImpl.java | 31 +++++++++++++++++++ 5 files changed, 61 insertions(+) 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 5817a704..90300b78 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 @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import java.util.List; +import java.util.Set; @Data @SuperBuilder @@ -83,4 +84,9 @@ public class ListRoleReq { * 例如:((workspaceId = ## and ouId = ##) or (workspaceId = ## and ouId = ##)) */ private List workspaceOuPairs; + + /** + * 角色权限码 + */ + private Set roleCodes; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java index 3c7ba434..b5e6a2f0 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/ListRoleUserRelationParam.java @@ -11,6 +11,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import java.util.List; +import java.util.Set; @SuperBuilder @Data @@ -106,6 +107,12 @@ public class ListRoleUserRelationParam { @CriteriaField(ignore = true) private Boolean needPermission; + /** + * 角色权限码 + */ + @CriteriaField(ignore = true) + private Set roleCodes; + @Data @Builder @NoArgsConstructor diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/PageRoleUserRelationParam.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/PageRoleUserRelationParam.java index 01a2af54..4949d781 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/PageRoleUserRelationParam.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/PageRoleUserRelationParam.java @@ -2,11 +2,13 @@ package cn.axzo.tyr.client.model.roleuser.req; import cn.axzo.foundation.dao.support.wrapper.CriteriaField; import cn.axzo.foundation.page.IPageReq; +import cn.axzo.foundation.page.PageResp; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import java.util.Collections; import java.util.List; @SuperBuilder @@ -26,4 +28,13 @@ public class PageRoleUserRelationParam extends ListRoleUserRelationParam impleme */ @CriteriaField(ignore = true) List sort; + + public PageResp toEmpty() { + return PageResp.builder() + .current(this.getPage()) + .size(this.getPageSize()) + .total(0) + .data(Collections.emptyList()) + .build(); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index 7e1f5c7b..f69896eb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -139,6 +139,12 @@ public interface RoleService extends IService { @CriteriaField(field = "id", operator = Operator.NE) private Long idNE; + /** + * 角色权限码 + */ + @CriteriaField(field = "roleCode", operator = Operator.IN) + private Set roleCodes; + /** * 权限点从saas_feature_resource表查询 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java index fdcfb4a2..a387ddf1 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java @@ -9,6 +9,7 @@ import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; import cn.axzo.framework.domain.page.PageResp; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; +import cn.axzo.tyr.client.model.res.SaasRoleRes; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserDTO; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO; import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; @@ -29,6 +30,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.BooleanUtils; import org.springframework.beans.BeanUtils; @@ -43,6 +45,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -152,6 +155,12 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl roleIds = resolveRoleIds(param); + if (!CollectionUtils.isEmpty(param.getRoleCodes()) && CollectionUtils.isEmpty(roleIds)) { + return param.toEmpty(); + } + wrapper.in(!CollectionUtils.isEmpty(roleIds), "role_id", roleIds); + IPage page = this.page(PageConverter.toMybatis(param, SaasRoleUserRelation.class), wrapper); Map saasRoleUsers = listSaasRoleUser(param, page.getRecords()); @@ -161,6 +170,28 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl from(record, saasRoleUsers, saasRoles)); } + private Set resolveRoleIds(PageRoleUserRelationParam param) { + if (CollectionUtils.isEmpty(param.getRoleCodes())) { + return Optional.ofNullable(param.getRoleIds()) + .map(Sets::newHashSet) + .orElseGet(Sets::newHashSet); + } + RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder() + .roleCodes(param.getRoleCodes()) + .build(); + Set roleIds = roleService.list(listSaasRoleParam).stream() + .map(SaasRoleRes::getId) + .collect(Collectors.toSet()); + + if (CollectionUtils.isEmpty(param.getRoleIds())) { + return roleIds; + } + + return param.getRoleIds().stream() + .filter(roleIds::contains) + .collect(Collectors.toSet()); + } + private Map listSaasRoleUser(PageRoleUserRelationParam param, List saasRoleUserRelations) { if (CollectionUtils.isEmpty(saasRoleUserRelations) || BooleanUtils.isNotTrue(param.getNeedUsers())) { From 40d076efb18df8799d95c453a2916b4e746b3a01 Mon Sep 17 00:00:00 2001 From: lilong Date: Fri, 23 Aug 2024 13:58:46 +0800 Subject: [PATCH 6/6] =?UTF-8?q?feat:(REQ-2488)=20=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=BF=94=E5=9B=9EroleCode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/client/model/roleuser/dto/SaasRoleUserV2DTO.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserV2DTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserV2DTO.java index d031d60a..dd771aa4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserV2DTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserV2DTO.java @@ -72,6 +72,8 @@ public class SaasRoleUserV2DTO { */ private String roleType; + private String roleCode; + private Long workspaceId; private Long ownerOuId;