From 0232279c838ccb550be6de3e96e39e420185ba83 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 27 Nov 2023 18:10:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(permission):=20=E6=9D=83=E9=99=90=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=94=AF=E6=8C=81=E6=8C=87=E5=AE=9A=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/req/IdentityAuthReq.java | 3 ++ .../service/impl/TyrSaasAuthServiceImpl.java | 41 +++++++++++++++---- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/IdentityAuthReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/IdentityAuthReq.java index dff78ac7..b2f92fc5 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/IdentityAuthReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/IdentityAuthReq.java @@ -56,6 +56,9 @@ public class IdentityAuthReq { @Builder.Default private Set featureCode = new HashSet<>(); + /** 指定角色ID - 预览用,不需要用户已配置角色 **/ + private List specifyRoleIds; + @Data @Builder 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 f2490cd0..b7edd228 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 @@ -316,17 +316,40 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { userRoleInfoMap.setWorkspaceJoinType(WorkspaceJoinType.matchValue(e.getWorkspaceJoinType())); queryKey.putIfAbsent(KeyUtil.buildKeyBySeparator(e.getWorkspaceId(), e.getOuId()), userRoleInfoMap); }); - stopWatch.start("query role user relation"); - List saasRoleUserRelations = roleUserService.queryByWorkspaceIdOrOu(identityAuthReq.getIdentityId(), identityAuthReq.getIdentityType(), queryWorkspace, queryOuId); - stopWatch.stop(); - if (CollectionUtil.isEmpty(saasRoleUserRelations)) { - return result; - } - // 有工作台和单位的查询条件,通过单位与工作台在过滤一次 - if (CollectionUtil.isNotEmpty(queryInfo)) { - saasRoleUserRelations = saasRoleUserRelations.stream().filter(roleUserService -> queryKey.containsKey(KeyUtil.buildKeyBySeparator(roleUserService.getWorkspaceId(), roleUserService.getOuId()))).collect(Collectors.toList()); + + final List saasRoleUserRelations = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(identityAuthReq.getSpecifyRoleIds())) { + //指定了角色 则不需要去查用户角色关系 + // mock 看做已有所有角色 + queryKey.values().forEach(k -> { + List relations = identityAuthReq.getSpecifyRoleIds().stream().map(id -> { + SaasRoleUserRelation relation = new SaasRoleUserRelation(); + relation.setRoleId(id); + relation.setOuId(k.getOuId()); + relation.setWorkspaceId(k.getWorkspaceId()); + relation.setIdentityId(identityAuthReq.getIdentityId()); + relation.setIdentityType(identityAuthReq.getIdentityType().getCode()); + return relation; + }).collect(Collectors.toList()); + saasRoleUserRelations.addAll(relations); + }); + } else { + stopWatch.start("query role user relation"); + List relations = roleUserService.queryByWorkspaceIdOrOu(identityAuthReq.getIdentityId(), identityAuthReq.getIdentityType(), queryWorkspace, queryOuId); + stopWatch.stop(); + if (CollectionUtil.isEmpty(relations)) { + return result; + } + // 有工作台和单位的查询条件,通过单位与工作台在过滤一次 + if (CollectionUtil.isNotEmpty(queryInfo)) { + saasRoleUserRelations.addAll(relations.stream() + .filter(roleUserService -> queryKey.containsKey( + KeyUtil.buildKeyBySeparator(roleUserService.getWorkspaceId(), roleUserService.getOuId()))) + .collect(Collectors.toList())); + } } + Set realWorkspaceId = saasRoleUserRelations.stream().map(SaasRoleUserRelation::getWorkspaceId).collect(Collectors.toSet()); Set realOuId = saasRoleUserRelations.stream().map(SaasRoleUserRelation::getOuId).collect(Collectors.toSet()); //工作台对应产品 key = workapceId