From e76ded018d26b8daa3c598c7e6997899dc4f2c0b Mon Sep 17 00:00:00 2001 From: TanJ Date: Wed, 10 Jan 2024 10:49:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(2046)=20=E7=8F=AD=E7=BB=84=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E6=B7=BB=E5=8A=A0=E6=94=AF=E6=8C=81=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E8=AE=BE=E7=BD=AE=E4=B8=8E=E6=B8=85=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/roleuser/dto/IdentityInfo.java | 24 +++++++++++ .../req/WorkerManagerRoleUserReq.java | 7 ++- .../axzo/tyr/server/model/RoleUserInfo.java | 5 ++- .../dao/SaasRoleUserRelationDao.java | 11 +++-- .../server/service/impl/RoleUserService.java | 43 ++++++++++++------- 5 files changed, 66 insertions(+), 24 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/IdentityInfo.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/IdentityInfo.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/IdentityInfo.java new file mode 100644 index 00000000..59d88489 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/IdentityInfo.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.model.roleuser.dto; + +import cn.axzo.tyr.client.model.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author tanjie@axzo.cn + * @date 2024/1/10 10:38 + */ +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Data +public class IdentityInfo { + private Long personId; + + private Long identityId; + + private IdentityType identityType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/WorkerManagerRoleUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/WorkerManagerRoleUserReq.java index c5920f06..78e028fe 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/WorkerManagerRoleUserReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/WorkerManagerRoleUserReq.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.client.model.roleuser.req; import cn.axzo.tyr.client.common.enums.SaasPositionEnum; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.enums.WorkerLeaderRoleEnum; +import cn.axzo.tyr.client.model.roleuser.dto.IdentityInfo; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -10,6 +11,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; +import java.util.ArrayList; import java.util.List; @@ -39,8 +41,8 @@ public class WorkerManagerRoleUserReq { private Long resourceId; private IdentityType identityType; - private Long identityId; - private Long personId; + @Builder.Default + private List identityInfos = new ArrayList<>(); /** * 这个字段在设置后续产品重构了班组管理员、代班长相关功能的时候,要替换成ROLE ID。 * 现在保留权限集ID是因为只是做统一权限角色,查询链路先暂时不变(REQ-2046) @@ -70,4 +72,5 @@ public class WorkerManagerRoleUserReq { + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/model/RoleUserInfo.java b/tyr-server/src/main/java/cn/axzo/tyr/server/model/RoleUserInfo.java index fedfa084..59880c1d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/model/RoleUserInfo.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/model/RoleUserInfo.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.server.model; import cn.axzo.tyr.client.model.enums.IdentityType; +import cn.axzo.tyr.client.model.roleuser.dto.IdentityInfo; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -23,9 +24,9 @@ public class RoleUserInfo { private Integer resourceType; private Long resourceId; private IdentityType identityType; - private Long identityId; - private Long personId; + private List identityInfos; private Set roleId; + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java index c5249ec1..5bd8ba36 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java @@ -4,6 +4,7 @@ import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.BaseWorkspaceModel; import cn.axzo.tyr.client.model.enums.IdentityType; +import cn.axzo.tyr.client.model.roleuser.dto.IdentityInfo; import cn.axzo.tyr.server.model.RoleUserInfo; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; @@ -15,6 +16,7 @@ import org.springframework.stereotype.Repository; import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.stream.Collectors; @Repository public class SaasRoleUserRelationDao extends ServiceImpl { @@ -98,11 +100,11 @@ public class SaasRoleUserRelationDao extends ServiceImpl findByResource(RoleUserInfo req) { - return lambdaQuery().eq(SaasRoleUserRelation::getIdentityId, req.getIdentityId()) + return lambdaQuery() .eq(SaasRoleUserRelation::getIdentityType, req.getIdentityType().getCode()) .in(CollectionUtil.isNotEmpty(req.getRoleId()), SaasRoleUserRelation::getRoleId, req.getRoleId()) .eq(SaasRoleUserRelation::getOuId, req.getOuId()) - .eq(SaasRoleUserRelation::getNaturalPersonId,req.getPersonId()) + .in(CollectionUtil.isNotEmpty(req.getIdentityInfos()),SaasRoleUserRelation::getIdentityId,req.getIdentityInfos().stream().map(IdentityInfo::getIdentityId)) .eq(SaasRoleUserRelation::getWorkspaceId, req.getWorkspaceId()) .eq(SaasRoleUserRelation::getResourceType, req.getResourceType()) .eq(SaasRoleUserRelation::getRoleId, req.getResourceId()) @@ -110,15 +112,16 @@ public class SaasRoleUserRelationDao extends ServiceImpl exist = roleUserRelationDao.findByResource(roleUserBaseInfo); - Set existRole = exist.stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toSet()); - // 防止重复插入数据,过滤一次 - roleUserRelationDao.saveBatch(roleInfos.stream().filter(e -> !existRole.contains(e.getId())).map(e -> { - SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation(); - saasRoleUserRelation.setIdentityId(req.getIdentityId()); - saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode()); - saasRoleUserRelation.setRoleId(e.getId()); - saasRoleUserRelation.setNaturalPersonId(req.getPersonId()); - saasRoleUserRelation.setOuId(req.getOuId()); - saasRoleUserRelation.setWorkspaceId(req.getWorkspaceId()); - saasRoleUserRelation.setResourceType(req.getResourceType()); - saasRoleUserRelation.setResourceId(req.getResourceId()); - return saasRoleUserRelation; - }).collect(Collectors.toList())); + Set existKey = exist.stream().map(e -> KeysUtil.createKey(e.getNaturalPersonId(), e.getOuId(), e.getWorkspaceId(), e.getResourceId(), e.getResourceType(),e.getRoleId())).collect(Collectors.toSet()); + // 防止重复插入数据,过滤一次原始数据 + // 第一个维度,人 + roleUserRelationDao.saveBatch(roleUserBaseInfo.getIdentityInfos().stream().map(e -> { + // 第二个维度,角色 + return roleUserBaseInfo.getRoleId().stream().map(roleId -> { + if (existKey.contains(KeysUtil.createKey(e.getPersonId(), roleUserBaseInfo.getOuId(), roleUserBaseInfo.getWorkspaceId(), roleUserBaseInfo.getResourceId(), roleUserBaseInfo.getResourceType(), roleId))) { + return null; + } + SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation(); + saasRoleUserRelation.setIdentityId(e.getIdentityId()); + saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode()); + saasRoleUserRelation.setRoleId(roleId); + saasRoleUserRelation.setNaturalPersonId(e.getPersonId()); + saasRoleUserRelation.setOuId(req.getOuId()); + saasRoleUserRelation.setWorkspaceId(req.getWorkspaceId()); + saasRoleUserRelation.setResourceType(req.getResourceType()); + saasRoleUserRelation.setResourceId(req.getResourceId()); + return saasRoleUserRelation; + }).filter(Objects::nonNull).collect(Collectors.toList()); + }).flatMap(Collection::stream).collect(Collectors.toList())); return; } // 取消授权