From 4082c9d8cef292037a4d794cc98c1cf9a14445d7 Mon Sep 17 00:00:00 2001 From: lilong Date: Thu, 5 Sep 2024 15:37:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:(REQ-2750)=20=E5=8E=BB=E6=8E=89saasRoleUse?= =?UTF-8?q?rRelation=E7=9A=84=E9=87=8D=E5=A4=8D=E6=9F=A5=E8=AF=A2=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E5=88=87=E6=8D=A2=E5=88=B0=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/roleuser/dto/SaasRoleUserV2DTO.java | 72 +++++------ .../req/ListRoleUserRelationParam.java | 12 ++ .../roleuser/RoleUserController.java | 114 +++++++++++++++++- .../service/SaasRoleUserRelationService.java | 10 +- .../impl/PermissionQueryServiceImpl.java | 13 +- .../server/service/impl/RoleUserService.java | 3 + .../impl/SaasRoleUserRelationServiceImpl.java | 106 +++------------- .../service/impl/TyrSaasAuthServiceImpl.java | 24 ++-- 8 files changed, 188 insertions(+), 166 deletions(-) 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 3d2cb4ff..357aeeac 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 @@ -1,13 +1,12 @@ package cn.axzo.tyr.client.model.roleuser.dto; -import cn.axzo.tyr.client.model.res.SaasPermissionRelationRes; -import cn.axzo.tyr.client.model.res.SaasPermissionRes; +import cn.axzo.tyr.client.model.res.SaasRoleRes; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.List; +import java.util.Date; @Data @Builder @@ -17,6 +16,30 @@ public class SaasRoleUserV2DTO { private Long id; + protected Date createAt; + + protected Date updateAt; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 更新者 + */ + private Long updateBy; + + /** + * 资源类型 + */ + private Integer resourceType; + + /** + * 资源Id + */ + private Long resourceId; + /** * 角色Id */ @@ -24,7 +47,7 @@ public class SaasRoleUserV2DTO { private SaasRoleUser saasRoleUser; - private SaasRole saasRole; + private SaasRoleRes saasRole; @Data @Builder @@ -66,45 +89,4 @@ public class SaasRoleUserV2DTO { return this.getOuId() + "_" + this.getWorkspaceId(); } } - - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class SaasRole { - private Long id; - - /** - * 角色名称 - */ - private String name; - - /** - * 角色类型: - * cn.axzo.tyr.client.common.enums.RoleTypeEnum - */ - private String roleType; - - private String roleCode; - - private Long workspaceId; - - private Long ownerOuId; - - /** - * 产品单位类型 - * 1:总包 2:建设单位 3:监理单位 4:劳务分包 5:专业分包 6:OMS通用 7:企业通用 8:企业内班组 9:项目内班组 - */ - private Integer productUnitType; - - /** - * 角色权限 - */ - private List saasPermissions; - - /** - * 角色关联的权限点id信息,没有featureCode,直接查询的pgPermissionRelation - */ - private List permissionRelations; - } } 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 b5e6a2f0..72ba14c3 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 @@ -28,6 +28,15 @@ public class ListRoleUserRelationParam { @CriteriaField(field = "ouId", operator = Operator.EQ) private Long ouId; + @CriteriaField(field = "workspaceId", operator = Operator.EQ) + private Long workspaceId; + + @CriteriaField(field = "ouId", operator = Operator.IN) + private Set ouIds; + + @CriteriaField(field = "workspaceId", operator = Operator.IN) + private Set workspaceIds; + /** * 是否显示 */ @@ -61,6 +70,9 @@ public class ListRoleUserRelationParam { @CriteriaField(field = "identityId", operator = Operator.EQ) private Long identityId; + @CriteriaField(field = "identityId", operator = Operator.IN) + private Set identityIds; + /** * workspaceId和ouId配对查询 * 例如:((workspaceId = ## and ouId = ##) or (workspaceId = ## and ouId = ##)) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java index fe4919da..17e1f647 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java @@ -1,9 +1,11 @@ package cn.axzo.tyr.server.controller.roleuser; import cn.axzo.basics.common.util.AssertUtil; +import cn.axzo.foundation.page.PageResp; import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.roleuser.RoleUserUpdateReq; @@ -12,13 +14,26 @@ import cn.axzo.tyr.client.model.roleuser.dto.GetUserFeatureResourceIdsResp; 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.dto.SuperAminInfoResp; -import cn.axzo.tyr.client.model.roleuser.req.*; +import cn.axzo.tyr.client.model.roleuser.req.AutoOwnRoleUserReq; +import cn.axzo.tyr.client.model.roleuser.req.CreateSuperAdminRoleParam; +import cn.axzo.tyr.client.model.roleuser.req.GantOrUnGantaWorkerLeaderRoleReq; +import cn.axzo.tyr.client.model.roleuser.req.GetUserAutoOwnRoleReq; +import cn.axzo.tyr.client.model.roleuser.req.GetUserFeatureResourceIdsReq; +import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; +import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; +import cn.axzo.tyr.client.model.roleuser.req.SuperAdminParam; +import cn.axzo.tyr.client.model.roleuser.req.WorkerManagerRoleUserReq; import cn.axzo.tyr.server.model.PermissionCacheKey; import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.service.PermissionCacheService; import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import cn.axzo.tyr.server.service.SaasRoleUserService; +import cn.hutool.core.bean.BeanUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; @@ -28,6 +43,9 @@ import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.util.Collections; import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; /** * @author tanjie@axzo.cn @@ -87,7 +105,54 @@ public class RoleUserController implements TyrSaasRoleUserApi { @Override public ApiResult> roleUserList(@RequestBody @Valid RoleUserParam param) { - return ApiResult.ok(saasRoleUserRelationService.list(param)); + + // 去掉原saasRoleUserRelationService.list的重复查询接口,原接口只查询1000条,所以保持一致 + List saasRoleUsers = saasRoleUserRelationService.page(PageRoleUserRelationParam.builder() + .personId(param.getPersonId()) + .identityId(param.getIdentityId()) + .identityType(param.getIdentityType()) + .roleIds(Optional.ofNullable(param.getRoleIds()) + .map(Lists::newArrayList) + .orElse(null)) + .identityIds(param.getIdentityIds()) + .ouId(param.getOuId()) + .workspaceId(param.getWorkspaceId()) + .ouIds(Optional.ofNullable(param.getOuIds()) + .map(Sets::newHashSet) + .orElse(null)) + .workspaceIds(Optional.ofNullable(param.getWorkspaceIds()) + .map(Sets::newHashSet) + .orElse(null)) + .page(1) + .pageSize(1000) + .needRole(true) + .build()) + .getData() + .stream() + .filter(e -> Objects.nonNull(e.getSaasRole())) + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(saasRoleUsers)) { + return ApiResult.ok(Collections.emptyList()); + } + + List saasRoleUserDTOS = saasRoleUsers.stream() + .map(e -> { + SaasRoleUserDTO userRole = BeanUtil.copyProperties(e, SaasRoleUserDTO.class); + userRole.setNaturalPersonId(e.getSaasRoleUser().getPersonId()); + userRole.setRoleName(e.getSaasRole().getName()); + userRole.setDescription(e.getSaasRole().getDescription()); + userRole.setRoleType(RoleTypeEnum.getRoleType(e.getSaasRole().getRoleType())); + userRole.setDisplayRole(e.getSaasRole().getIsDisplay()); + userRole.setEnabled(e.getSaasRole().getEnabled()); + userRole.setIdentityId(e.getSaasRoleUser().getIdentityId()); + userRole.setIdentityType(e.getSaasRoleUser().getIdentityType()); + userRole.setOuId(e.getSaasRoleUser().getOuId()); + userRole.setWorkspaceId(e.getSaasRoleUser().getWorkspaceId()); + return userRole; + }) + .collect(Collectors.toList()); + + return ApiResult.ok(saasRoleUserDTOS); } @Override @@ -157,7 +222,50 @@ public class RoleUserController implements TyrSaasRoleUserApi { @Override public ApiPageResult pageQuery(RoleUserParam param) { - return ApiPageResult.ok(saasRoleUserRelationService.pageQuery(param)); + // 兼容以前接口切换到统一查询接口,原接口废弃 + PageResp saasRoleUsers = saasRoleUserRelationService.page(PageRoleUserRelationParam.builder() + .personId(param.getPersonId()) + .identityId(param.getIdentityId()) + .identityType(param.getIdentityType()) + .roleIds(Optional.ofNullable(param.getRoleIds()) + .map(Lists::newArrayList) + .orElse(null)) + .identityIds(param.getIdentityIds()) + .ouId(param.getOuId()) + .workspaceId(param.getWorkspaceId()) + .ouIds(Optional.ofNullable(param.getOuIds()) + .map(Sets::newHashSet) + .orElse(null)) + .workspaceIds(Optional.ofNullable(param.getWorkspaceIds()) + .map(Sets::newHashSet) + .orElse(null)) + .page(Optional.ofNullable(param.getPage()) + .map(Long::intValue) + .orElse(null)) + .pageSize(Optional.ofNullable(param.getPageSize()) + .map(Long::intValue) + .orElse(null)) + .build()); + if (CollectionUtils.isEmpty(saasRoleUsers.getData())) { + return ApiPageResult.ok(cn.axzo.framework.domain.page.PageResp.zero(param.getPage(), param.getPageSize())); + } + + List saasRoleUserDTOS = saasRoleUsers.getData().stream() + .map(e -> { + SaasRoleUserDTO userRole = BeanUtil.copyProperties(e, SaasRoleUserDTO.class); + userRole.setNaturalPersonId(e.getSaasRoleUser().getPersonId()); + userRole.setIdentityId(e.getSaasRoleUser().getIdentityId()); + userRole.setIdentityType(e.getSaasRoleUser().getIdentityType()); + userRole.setOuId(e.getSaasRoleUser().getOuId()); + userRole.setWorkspaceId(e.getSaasRoleUser().getWorkspaceId()); + return userRole; + }) + .collect(Collectors.toList()); + + return ApiPageResult.ok(cn.axzo.framework.domain.page.PageResp.list(saasRoleUsers.getCurrent(), + saasRoleUsers.getSize(), + saasRoleUsers.getTotal(), + saasRoleUserDTOS)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java index 0d24c505..6a8a6089 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java @@ -1,14 +1,9 @@ package cn.axzo.tyr.server.service; -import cn.axzo.framework.domain.page.PageResp; -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; import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; -import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -18,11 +13,10 @@ import java.util.List; * @date 2023/9/14 */ public interface SaasRoleUserRelationService extends IService { - List list(RoleUserParam param); - - PageResp pageQuery(RoleUserParam param); List listV2(ListRoleUserRelationParam param); cn.axzo.foundation.page.PageResp page(PageRoleUserRelationParam param); + + void upsert(List saasRoleUserRelations); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java index 637e1011..3b1e897b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionQueryServiceImpl.java @@ -37,6 +37,7 @@ import cn.axzo.tyr.client.model.res.NavTreeResp; import cn.axzo.tyr.client.model.res.ProductFeatureResourceResp; 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.TreePermissionResp; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO; import cn.axzo.tyr.client.model.roleuser.req.ListRoleUserRelationParam; @@ -412,7 +413,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { .map(roleUser -> { WorkspaceProductService.WorkspaceProduct workspaceProduct = workspaceProductMap.get(roleUser.getSaasRoleUser().getWorkspaceId()); - SaasRoleUserV2DTO.SaasRole saasRole = roleUser.getSaasRole(); + SaasRoleRes saasRole = roleUser.getSaasRole(); if (RoleTypeEnum.isAdmin(saasRole.getRoleType())) { return resolveAdminRole(workspaceProduct, saasRole); } @@ -997,7 +998,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { return null; } - SaasRoleUserV2DTO.SaasRole saasRole = roleUser.getSaasRole(); + SaasRoleRes saasRole = roleUser.getSaasRole(); Set adminFeatureIds = resolveAdminRole(productFeatureSources, saasRole); Set notAuthFeatureIds = resolveNotAuthFeatureIds(productFeatureSources, authFreeFeatureIds); @@ -1023,7 +1024,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { } private Set resolveAdminRole(List productFeatureSources, - SaasRoleUserV2DTO.SaasRole saasRole) { + SaasRoleRes saasRole) { if (!RoleTypeEnum.isAdmin(saasRole.getRoleType())) { return Collections.emptySet(); @@ -1038,7 +1039,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { } private Set resolveNormalRole(List workspaceProduct, - SaasRoleUserV2DTO.SaasRole saasRole, + SaasRoleRes saasRole, List roleFeatureResources) { if (CollectionUtils.isEmpty(roleFeatureResources)) { @@ -1071,7 +1072,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { } private List resolveAdminRole(WorkspaceProductService.WorkspaceProduct workspaceProduct, - SaasRoleUserV2DTO.SaasRole saasRole) { + SaasRoleRes saasRole) { //超管和管理员 直接取和角色类型匹配的租户产品权限 return workspaceProduct.getSaasProductModuleFeatureRelations().stream() @@ -1082,7 +1083,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { } private List resolveNormalRole(WorkspaceProductService.WorkspaceProduct workspaceProduct, - SaasRoleUserV2DTO.SaasRole saasRole, + SaasRoleRes saasRole, Set authFreeFeatureIds) { //普通角色:角色同类型的租户产品权限已分配 且角色上已分配 + 免授权 Set roleFeatureIds = Optional.ofNullable(saasRole.getPermissionRelations()) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index 7fb3dd6e..40e21701 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -12,6 +12,7 @@ import cn.axzo.tyr.client.model.BaseWorkspaceModel; import cn.axzo.tyr.client.model.enums.DictWorkSpaceTypeEnum; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.enums.WorkerLeaderRoleEnum; +import cn.axzo.tyr.client.model.res.SaasRoleRes; import cn.axzo.tyr.client.model.roleuser.RoleUserUpdateReq; import cn.axzo.tyr.client.model.roleuser.dto.GetUserAutoOwnRoleResp; import cn.axzo.tyr.client.model.roleuser.dto.GetUserFeatureResourceIdsResp; @@ -38,6 +39,7 @@ import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; +import cn.axzo.tyr.server.service.RoleService; import cn.axzo.tyr.server.service.SaasRoleGroupService; import cn.axzo.tyr.server.service.SaasRoleUserService; import cn.hutool.core.collection.CollectionUtil; @@ -84,6 +86,7 @@ public class RoleUserService implements SaasRoleUserService { private final SaasRoleGroupService saasRoleGroupService; private final SaasRoleGroupRelationDao saasRoleGroupRelationDao; private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; + private final RoleService roleService; // 单位类型默认角色关系,后面可以座位管理员的逻辑进行迭代 @Value("#{${participateUnitDefaultRoleId:{}}}") 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 77b7a3d4..1a05911c 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 @@ -1,33 +1,20 @@ package cn.axzo.tyr.server.service.impl; -import cn.axzo.basics.common.BeanMapper; -import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.basics.profiles.api.UserProfileServiceApi; import cn.axzo.basics.profiles.dto.basic.PersonProfileDto; import cn.axzo.foundation.dao.support.converter.PageConverter; 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; import cn.axzo.tyr.client.model.roleuser.req.PageRoleUserRelationParam; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; -import cn.axzo.tyr.server.repository.dao.SaasRoleDao; -import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; -import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; import cn.axzo.tyr.server.service.RoleService; import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import cn.axzo.tyr.server.util.RpcInternalUtil; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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; @@ -36,9 +23,9 @@ import org.apache.commons.lang3.BooleanUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import javax.annotation.Resource; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -58,76 +45,11 @@ import java.util.stream.Collectors; public class SaasRoleUserRelationServiceImpl extends ServiceImpl implements SaasRoleUserRelationService { - @Resource - private SaasRoleUserRelationDao saasRoleUserRelationDao; - - @Resource - private SaasRoleDao saasRoleDao; - @Autowired private UserProfileServiceApi userProfileServiceApi; @Autowired private RoleService roleService; - @Override - public List list(RoleUserParam param) { - // TODO jhy 角色查询 需要验证标准角色和自定义角色的查询逻辑 - LambdaQueryChainWrapper wrapper = buildWrapper(param); - List saasRoleUserRelations = wrapper.last("LIMIT 1000").list(); - if (CollectionUtil.isEmpty(saasRoleUserRelations)) { - return Collections.emptyList(); - } - Map roleMap = saasRoleDao.lambdaQuery() - .in(SaasRole::getId, saasRoleUserRelations.stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toSet())) - .list().stream().collect(Collectors.toMap(SaasRole::getId, Function.identity())); - - return saasRoleUserRelations.stream() - .filter(e -> roleMap.containsKey(e.getRoleId())) - .map(e -> { - SaasRoleUserDTO userRole = BeanUtil.copyProperties(e, SaasRoleUserDTO.class); - SaasRole role = roleMap.get(userRole.getRoleId()); - userRole.setRoleName(role.getName()); - userRole.setDescription(role.getDescription()); - userRole.setRoleType(RoleTypeEnum.getRoleType(role.getRoleType())); - userRole.setDisplayRole(role.getIsDisplay()); - userRole.setEnabled(role.getEnabled()); - return userRole; - }).collect(Collectors.toList()); - } - - private LambdaQueryChainWrapper buildWrapper(RoleUserParam param) { - return saasRoleUserRelationDao.lambdaQuery() - .eq(Objects.nonNull(param.getPersonId()), SaasRoleUserRelation::getNaturalPersonId, param.getPersonId()) - .eq(Objects.nonNull(param.getIdentityId()), SaasRoleUserRelation::getIdentityId, param.getIdentityId()) - .eq(Objects.nonNull(param.getIdentityType()), SaasRoleUserRelation::getIdentityType, param.getIdentityType()) - .eq(Objects.nonNull(param.getWorkspaceId()), SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceId()) - .eq(Objects.nonNull(param.getOuId()), SaasRoleUserRelation::getOuId, param.getOuId()) - .in(CollectionUtil.isNotEmpty(param.getOuIds()), SaasRoleUserRelation::getOuId, param.getOuIds()) - .in(CollectionUtil.isNotEmpty(param.getWorkspaceIds()), SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceIds()) - .in(CollectionUtil.isNotEmpty(param.getRoleIds()), SaasRoleUserRelation::getRoleId, param.getRoleIds()) - .in(CollectionUtil.isNotEmpty(param.getIdentityIds()), SaasRoleUserRelation::getIdentityId, param.getIdentityIds()) - .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value); - } - - @Override - public PageResp pageQuery(RoleUserParam param) { - //限制分页100 - if (param.getPageSize() != null && param.getPageSize().compareTo(200L) > 0) { - param.setPageSize(100L); - } - //查询条件构造 - ID升序 - LambdaQueryChainWrapper wrapper = buildWrapper(param) - .orderByAsc(SaasRoleUserRelation::getId); - IPage page = wrapper.page(param.toPage()); - if (CollectionUtil.isEmpty(page.getRecords())) { - return PageResp.zero(param.getPage(), param.getPageSize()); - } - List list = page.getRecords().stream() - .map(r -> BeanMapper.copyBean(r, SaasRoleUserDTO.class)) - .collect(Collectors.toList()); - return PageResp.list(param.getPage(), param.getPageSize(), page.getTotal(), list); - } - @Override public List listV2(ListRoleUserRelationParam param) { return PageConverter.drainAll(pageNumber -> { @@ -165,11 +87,17 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl saasRoleUsers = listSaasRoleUser(param, page.getRecords()); - Map saasRoles = listSaasRole(param, page.getRecords()); + Map saasRoles = listSaasRole(param, page.getRecords()); return PageConverter.toResp(page, (record) -> from(record, saasRoleUsers, saasRoles)); } + @Override + @Transactional + public void upsert(List saasRoleUserRelations) { + + } + private Set resolveRoleIds(PageRoleUserRelationParam param) { if (CollectionUtils.isEmpty(param.getRoleCodes())) { return Optional.ofNullable(param.getRoleIds()) @@ -231,7 +159,7 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl saasRoleUsers, - Map saasRoles) { + Map saasRoles) { SaasRoleUserV2DTO.SaasRoleUser saasRoleUser = SaasRoleUserV2DTO.SaasRoleUser.builder() .ouId(saasRoleUserRelation.getOuId()) @@ -244,15 +172,16 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl listSaasRole(PageRoleUserRelationParam param, + private Map listSaasRole(PageRoleUserRelationParam param, List saasRoleUserRelations) { if (CollectionUtils.isEmpty(saasRoleUserRelations) || BooleanUtils.isNotTrue(param.getNeedRole())) { return Collections.emptyMap(); @@ -276,11 +205,6 @@ public class SaasRoleUserRelationServiceImpl extends ServiceImpl { - SaasRoleUserV2DTO.SaasRole saasRole = SaasRoleUserV2DTO.SaasRole.builder().build(); - BeanUtils.copyProperties(e, saasRole); - return saasRole; - }) - .collect(Collectors.toMap(SaasRoleUserV2DTO.SaasRole::getId, Function.identity())); + .collect(Collectors.toMap(SaasRoleRes::getId, Function.identity())); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java index 7e2c7bfd..de23dc74 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java @@ -1425,16 +1425,14 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { RoleService.ListSaasRoleParam listSaasRoleParam = RoleService.ListSaasRoleParam.builder() .roleIds(Lists.newArrayList(identityAuthReq.getSpecifyRoleIds())) .build(); - Map saasRoles = roleService.list(listSaasRoleParam).stream() - .map(role -> SaasRoleUserV2DTO.SaasRole.builder() - .build()) - .collect(Collectors.toMap(SaasRoleUserV2DTO.SaasRole::getId, Function.identity())); + Map saasRoles = roleService.list(listSaasRoleParam).stream() + .collect(Collectors.toMap(SaasRoleRes::getId, Function.identity())); return identityAuthReq.getWorkspaceOusPairs().stream() .map(workspaceOuPair -> identityAuthReq.getSpecifyRoleIds().stream() .map(roleId -> { - SaasRoleUserV2DTO.SaasRole saasRole = saasRoles.get(roleId); + SaasRoleRes saasRole = saasRoles.get(roleId); if (Objects.isNull(saasRole)) { return null; } @@ -1496,7 +1494,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { Map> rolePermissions = listRolePermission(identityAuthReq, saasRoleUsers); - Map> workspaceRoles = saasRoleUsers.stream() + Map> workspaceRoles = saasRoleUsers.stream() .collect(Collectors.groupingBy(e -> e.getSaasRoleUser().buildOuWorkspaceKey(), Collectors.mapping(SaasRoleUserV2DTO::getSaasRole, Collectors.toList()))); @@ -1532,7 +1530,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { .build(); } - List saasRoles = workspaceRoles.get(workspaceOuPair.buildOuWorkspaceKey()); + List saasRoles = workspaceRoles.get(workspaceOuPair.buildOuWorkspaceKey()); if (CollectionUtils.isEmpty(saasRoles)) { return IdentityAuthRes.WorkspacePermission.builder() @@ -1557,7 +1555,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { private IdentityAuthRes.WorkspacePermission buildPermissionsV2(IdentityAuthReq.WorkspaceOuPair workspaceOuPair, List productPermissions, - List saasRoles, + List saasRoles, Map> rolePermissions, List allFeatures) { @@ -1611,9 +1609,9 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { } private Set buildAdminPermissionV2(List productPermissions, - List saasRoles) { + List saasRoles) { //超管和管理员角色 - List adminRoles = Optional.ofNullable(saasRoles) + List adminRoles = Optional.ofNullable(saasRoles) .map(e -> e.stream() .filter(r -> RoleTypeEnum.isAdmin(r.getRoleType())) .collect(Collectors.toList())) @@ -1625,7 +1623,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { //聚合超管和管理员的权限点: 直接取角色标签和产品标签相匹配的权限点 Set productUnitTypes = adminRoles.stream() - .map(SaasRoleUserV2DTO.SaasRole::getProductUnitType) + .map(SaasRoleRes::getProductUnitType) .map(String::valueOf) .collect(Collectors.toSet()); @@ -1673,10 +1671,10 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { } private Set buildNormalPermissionV2(List productPermissions, - List saasRoles, + List saasRoles, Map> rolePermissionMap) { - List normalRoles =Optional.ofNullable(saasRoles) + List normalRoles =Optional.ofNullable(saasRoles) .map(e -> e.stream() .filter(r -> !RoleTypeEnum.isAdmin(r.getRoleType())) .collect(Collectors.toList()))