From 5884bd1edc0355cbc584228c1b03b0a9cb1caf4a Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 3 Jan 2024 15:43:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(permission):=20=E5=A2=9E=E5=8A=A0person?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=83=E9=99=90;=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=82=B9=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/IdentityAuthReq.java | 7 +- .../model/req/QueryPermissionByIdsReq.java | 38 +++++++++++ .../tyr/client/model/res/IdentityAuthRes.java | 1 + .../model/res/SimplePermissionPointResp.java | 67 +++++++++++++++++++ .../auth/TyrSaasAuthController.java | 6 ++ .../server/model/AuthPermissionCacheKey.java | 36 ++++++++++ .../dao/SaasRoleUserRelationDao.java | 9 ++- .../server/repository/entity/SaasFeature.java | 15 +++++ .../service/PermissionPointService.java | 5 ++ .../server/service/SaasRoleUserService.java | 2 +- .../impl/PermissionPointServiceImpl.java | 54 +++++++++++++++ .../server/service/impl/RoleUserService.java | 4 +- .../service/impl/TyrSaasAuthServiceImpl.java | 64 +++++++++++------- 13 files changed, 277 insertions(+), 31 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryPermissionByIdsReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SimplePermissionPointResp.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/model/AuthPermissionCacheKey.java 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 ec517d8f..85e8a35c 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 @@ -28,11 +28,14 @@ import java.util.Set; @NoArgsConstructor public class IdentityAuthReq { - @NotNull + /** 身份ID - 不能和人员ID同时为空**/ private Long identityId; - @NotNull + /** 身份类型 **/ private IdentityType identityType; + /** 人员ID 优先于身份- 不能和身份同时为空 **/ + private Long personId; + /** *
      * 防止数据量过多,工作台与单位必传
diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryPermissionByIdsReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryPermissionByIdsReq.java
new file mode 100644
index 00000000..45605bd6
--- /dev/null
+++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryPermissionByIdsReq.java
@@ -0,0 +1,38 @@
+package cn.axzo.tyr.client.model.req;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.Set;
+
+/**
+ * 根据ID查询权限点
+ *
+ * @version V1.0
+ * @author: ZhanSiHu
+ * @date: 2024/1/3 13:57
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class QueryPermissionByIdsReq {
+
+    @NotEmpty(message = "权限点ID不能为空")
+    private Set ids;
+
+    /** 是否包含父节点 - 默认false **/
+    @Builder.Default
+    private boolean includeParent = false;
+
+    /** 是否包含子节点 - 默认false **/
+    @Builder.Default
+    private boolean includeChildren = false;
+
+    /** 是否构建树型结构 - 默认false **/
+    @Builder.Default
+    private boolean buildTree = false;
+}
diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IdentityAuthRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IdentityAuthRes.java
index ae66126e..6ab3c6d6 100644
--- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IdentityAuthRes.java
+++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IdentityAuthRes.java
@@ -24,6 +24,7 @@ import java.util.List;
 public class IdentityAuthRes   {
     private Long identity;
     private IdentityType identityType;
+    private Long personId;
     @Builder.Default
     private List permissions=new ArrayList<>();
 
diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SimplePermissionPointResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SimplePermissionPointResp.java
new file mode 100644
index 00000000..afe9bd03
--- /dev/null
+++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/SimplePermissionPointResp.java
@@ -0,0 +1,67 @@
+package cn.axzo.tyr.client.model.res;
+
+import cn.axzo.basics.common.model.IBaseTree;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 权限点 - 字段简化
+ *
+ * @version V1.0
+ * @author: ZhanSiHu
+ * @date: 2024/1/3 11:52
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SimplePermissionPointResp implements IBaseTree {
+
+    /** 权限点ID **/
+    private Long id;
+
+    /** 权限点名称 **/
+    private String name;
+
+    /** 权限点编码 **/
+    private String code;
+
+    /** 权限点所属端 **/
+    private String terminal;
+
+    /** 上级权限点ID **/
+    private Long parentId;
+
+    /** 子节点 **/
+    private List children;
+
+    @JsonIgnore
+    @Override
+    public Long getNodeCode() {
+        return id;
+    }
+
+    @JsonIgnore
+    @Override
+    public Long getParentNodeCode() {
+        return parentId;
+    }
+
+    @JsonIgnore
+    @Override
+    public List getNodeChildren() {
+        return children;
+    }
+
+    @JsonIgnore
+    @Override
+    public void setNodeChildren(List nodeChildren) {
+        this.children = nodeChildren;
+    }
+
+}
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/auth/TyrSaasAuthController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/auth/TyrSaasAuthController.java
index c3c404a6..180f0cd6 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/auth/TyrSaasAuthController.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/auth/TyrSaasAuthController.java
@@ -1,5 +1,6 @@
 package cn.axzo.tyr.server.controller.auth;
 
+import cn.axzo.basics.common.util.AssertUtil;
 import cn.axzo.framework.domain.web.result.ApiResult;
 import cn.axzo.tyr.client.feign.TyrSaasAuthApi;
 import cn.axzo.tyr.client.model.req.CheckIdentityPermissionReq;
@@ -47,6 +48,11 @@ public class TyrSaasAuthController implements TyrSaasAuthApi {
 
     @Override
     public ApiResult findIdentityAuth(@Valid IdentityAuthReq identityAuthReq) {
+        //单独做下参数校验
+        if (identityAuthReq.getPersonId() == null
+                && (identityAuthReq.getIdentityId() == null || identityAuthReq.getIdentityType() == null)) {
+            AssertUtil.fail("自然人ID和身份ID/Type不能同时为空");
+        }
         return ApiResult.ok(tyrSaasAuthService.findIdentityAuthMix(identityAuthReq));
     }
 
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/model/AuthPermissionCacheKey.java b/tyr-server/src/main/java/cn/axzo/tyr/server/model/AuthPermissionCacheKey.java
new file mode 100644
index 00000000..90c80b99
--- /dev/null
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/model/AuthPermissionCacheKey.java
@@ -0,0 +1,36 @@
+package cn.axzo.tyr.server.model;
+
+import cn.axzo.tyr.server.util.KeyUtil;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 权限缓存key
+ *
+ * @version V1.0
+ * @author: ZhanSiHu
+ * @date: 2024/1/2 18:36
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AuthPermissionCacheKey {
+
+    private Long personId;
+
+    private Long identityId;
+
+    private Integer identityType;
+
+    private Long workspaceId;
+
+    private Long ouId;
+
+    public String buildKey() {
+        return personId == null ? KeyUtil.buildKeyBySeparator("auth-i", identityId, identityType, ouId, workspaceId)
+                : KeyUtil.buildKeyBySeparator("auth-p", personId, ouId, workspaceId);
+    }
+}
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 533f84f7..c703f24f 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
@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 @Repository
@@ -63,9 +64,11 @@ public class SaasRoleUserRelationDao extends ServiceImpl queryByWorkspaceIdOrOu(Long identityId, IdentityType identityType, Set workspaceIds, Set ouIds) {
-		return lambdaQuery().eq(SaasRoleUserRelation::getIdentityId, identityId)
-				.eq(SaasRoleUserRelation::getIdentityType, identityType)
+	public List queryByWorkspaceIdOrOu(Long personId, Long identityId, IdentityType identityType, Set workspaceIds, Set ouIds) {
+		return lambdaQuery()
+				.eq(Objects.nonNull(personId), SaasRoleUserRelation::getNaturalPersonId, personId)
+				.eq(Objects.nonNull(identityId), SaasRoleUserRelation::getIdentityId, identityId)
+				.eq(Objects.nonNull(identityType), SaasRoleUserRelation::getIdentityType, identityType)
 				.in(CollectionUtil.isNotEmpty(workspaceIds), SaasRoleUserRelation::getWorkspaceId, workspaceIds)
 				.in(CollectionUtil.isNotEmpty(ouIds), SaasRoleUserRelation::getOuId, ouIds)
 				.list();
diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java
index 3f04f6fc..5f63b251 100644
--- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java
+++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java
@@ -1,6 +1,7 @@
 package cn.axzo.tyr.server.repository.entity;
 
 import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -8,6 +9,11 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 

@@ -166,4 +172,13 @@ public class SaasFeature extends BaseEntity implements Serializable private Integer delegatedType; + public Set splitPath() { + if (StrUtil.isBlank(this.path)) { + return Collections.emptySet(); + } + return StrUtil.split(this.path, "/").stream() + .filter(id -> StrUtil.equals(id, "0")) + .map(Long::valueOf) + .collect(Collectors.toSet()); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java index a77bb2a7..b7ea2a4b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -6,6 +6,8 @@ import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; +import cn.axzo.tyr.client.model.req.QueryPermissionByIdsReq; +import cn.axzo.tyr.client.model.res.SimplePermissionPointResp; import cn.axzo.tyr.server.repository.entity.SaasFeature; import java.util.List; @@ -68,4 +70,7 @@ public interface PermissionPointService { * @return */ List getChildByParentId(Long parentId); + + /** 根据ID查询权限点 **/ + List listPermissionByIds(QueryPermissionByIdsReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java index 9a3f2b5d..eff409a3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java @@ -42,7 +42,7 @@ public interface SaasRoleUserService { * @param ouIds * @return */ - List queryByWorkspaceIdOrOu(Long identityId, IdentityType identityType, Set workspaceIds, Set ouIds); + List queryByWorkspaceIdOrOu(Long personId, Long identityId, IdentityType identityType, Set workspaceIds, Set ouIds); /** * workpaceId + ownerOuId + roleId + 手机号 + 姓名 赋予角色(支持角色赋予的同时 角色创建) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 2c3b56a6..f4e7e9c8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -9,6 +9,9 @@ import java.util.function.Function; import java.util.stream.Collectors; import cn.axzo.tyr.client.model.enums.FeatureDataType; +import cn.axzo.tyr.client.model.req.QueryPermissionByIdsReq; +import cn.axzo.tyr.client.model.res.SimplePermissionPointResp; +import cn.hutool.core.date.StopWatch; import cn.hutool.core.lang.Opt; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -600,4 +603,55 @@ public class PermissionPointServiceImpl implements PermissionPointService { List feature = saasFeatureDao.getChildByParentId(parentId); return BeanMapper.copyList(feature, PermissionPointDTO.class); } + + @Override + public List listPermissionByIds(QueryPermissionByIdsReq req) { + //查所有节点 - 按需过滤 + List result = new ArrayList<>(); + List allPermissions = saasFeatureDao.list(new LambdaQueryWrapper() + .select(SaasFeature::getId, + SaasFeature::getFeatureCode, + SaasFeature::getFeatureName, + SaasFeature::getParentId, + SaasFeature::getTerminal)); + + Set parentIds = new HashSet<>(); + for (SaasFeature permission : allPermissions) { + if (req.getIds().contains(permission.getId())) { + //匹配查询的节点ID + result.add(toSimplePermission(permission)); + + if (req.isIncludeParent()) { + //通过path汇总parent + parentIds.addAll(permission.splitPath()); + } + } else if (req.isIncludeChildren()) { + //path匹配查询节点ID - 子节点 + boolean isChildren = permission.splitPath().stream().anyMatch(id -> req.getIds().contains(id)); + if (isChildren) { + result.add(toSimplePermission(permission)); + } + } + } + if (!parentIds.isEmpty()) { + //加入所有父级节点 + result.addAll(allPermissions.stream() + .filter(p -> parentIds.contains(p.getId())) + .map(this::toSimplePermission) + .collect(Collectors.toList())); + } + + return result; + } + + private SimplePermissionPointResp toSimplePermission(SaasFeature permission) { + return SimplePermissionPointResp.builder() + .id(permission.getId()) + .code(permission.getFeatureCode()) + .name(permission.getFeatureName()) + .parentId(permission.getParentId()) + .terminal(permission.getTerminal()) + .build(); + } + } 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 b2c28699..e1c73eee 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 @@ -149,8 +149,8 @@ public class RoleUserService implements SaasRoleUserService { } @Override - public List queryByWorkspaceIdOrOu(Long identityId, IdentityType identityType, Set workspaceIds, Set ouIds) { - return roleUserRelationDao.queryByWorkspaceIdOrOu(identityId, identityType, workspaceIds, ouIds); + public List queryByWorkspaceIdOrOu(Long personId, Long identityId, IdentityType identityType, Set workspaceIds, Set ouIds) { + return roleUserRelationDao.queryByWorkspaceIdOrOu(personId, identityId, identityType, workspaceIds, ouIds); } @Override 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 3df411dc..7781a6d5 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 @@ -21,7 +21,9 @@ import cn.axzo.tyr.client.model.req.*; import cn.axzo.tyr.client.model.res.IdentityAuthRes; import cn.axzo.tyr.client.model.res.ListIdentityFromPermissionResp; import cn.axzo.tyr.client.model.res.QueryIdentityByPermissionResp; +import cn.axzo.tyr.client.model.res.SimplePermissionPointResp; import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import cn.axzo.tyr.server.model.AuthPermissionCacheKey; import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.repository.mapper.TyrSaasAuthMapper; import cn.axzo.tyr.server.service.PermissionPointService; @@ -347,7 +349,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { }); } else { stopWatch.start("query role user relation"); - List relations = roleUserService.queryByWorkspaceIdOrOu(identityAuthReq.getIdentityId(), identityAuthReq.getIdentityType(), queryWorkspace, queryOuId); + List relations = roleUserService.queryByWorkspaceIdOrOu(identityAuthReq.getPersonId(), identityAuthReq.getIdentityId(), identityAuthReq.getIdentityType(), queryWorkspace, queryOuId); stopWatch.stop(); if (CollectionUtil.isEmpty(relations)) { return result; @@ -440,15 +442,17 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { return; } - //通过子级查询父级并打平树型结构 - List allPermissionPoint = permissionPointService.listTreeNodesFlatChild(PermissionPointTreeQueryReq.builder() - .ids(buttonPermissionPointId) - .build()); + //查询权限点及父级权限点 + List allPermissionPoint = permissionPointService.listPermissionByIds( + QueryPermissionByIdsReq.builder() + .ids(buttonPermissionPointId) + .includeParent(true) + .build()); workspacePermission.getPermissionPoint().addAll(allPermissionPoint.stream() .map(permissionPointTreeNode -> IdentityAuthRes.PermissionPoint.builder() .featureCode(permissionPointTreeNode.getCode()) - .featureId(permissionPointTreeNode.getPermissionPointId()) + .featureId(permissionPointTreeNode.getId()) .terminal(permissionPointTreeNode.getTerminal()) // .featureType(FeatureType.apply(permissionPointTreeNode.getFeatureType())) .build()) @@ -476,15 +480,17 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { permissions.add(workspacePermission); return; } - //通过子级查询父级并平铺菜单 - List allPermissionPoint = permissionPointService.listTreeNodesFlatChild(PermissionPointTreeQueryReq.builder() - .ids(new HashSet<>(resultHashAuthPointId)) - .build()); + //查询权限点及父级权限点 + List allPermissionPoint = permissionPointService.listPermissionByIds( + QueryPermissionByIdsReq.builder() + .ids(new HashSet<>(resultHashAuthPointId)) + .includeParent(true) + .build()); workspacePermission.getPermissionPoint().addAll(allPermissionPoint.stream() .map(permissionPointTreeNode -> IdentityAuthRes.PermissionPoint.builder() .featureCode(permissionPointTreeNode.getCode()) - .featureId(permissionPointTreeNode.getPermissionPointId()) + .featureId(permissionPointTreeNode.getId()) .terminal(permissionPointTreeNode.getTerminal()) // .featureType(FeatureType.apply(permissionPointTreeNode.getFeatureType())) .build()) @@ -744,8 +750,14 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { } else { //从缓存取权限,并记录缓存中没有的OW req.getWorkspaceOusPairs().forEach(ow -> { - String key = KeyUtil.buildKeyBySeparator("auth", req.getIdentityId(), req.getIdentityType().getCode(), ow.getOuId(), ow.getWorkspaceId()); - IdentityAuthRes.WorkspacePermission permission = getIdentityAuthFromCache(key); + IdentityAuthRes.WorkspacePermission permission = getIdentityAuthFromCache(AuthPermissionCacheKey.builder() + .personId(req.getPersonId()) + .identityId(req.getIdentityId()) + .identityType(req.getIdentityType().getCode()) + .ouId(ow.getOuId()) + .workspaceId(ow.getWorkspaceId()) + .build() + .buildKey()); if (permission == null) { needQueryPairs.add(ow); } else { @@ -760,20 +772,25 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { req.setWorkspaceOusPairs(needQueryPairs); List authPermission = findIdentityPermission(req); permissions.addAll(authPermission); - if (CollectionUtil.isEmpty(authPermission)) { - //没有权限构建空权限对象进行缓存 - authPermission = needQueryPairs.stream() - .map(p -> IdentityAuthRes.WorkspacePermission.builder() + //缓存结果 - 无权限的缓存空权限对象 + Map permissionMap = authPermission.stream() + .collect(Collectors.toMap(p -> p.getOuId() + "-" + p.getWorkspaceId(), Function.identity())); + needQueryPairs.forEach(p -> { + IdentityAuthRes.WorkspacePermission permission = permissionMap.getOrDefault(p.getOuId() + "-" + p.getWorkspaceId(), + IdentityAuthRes.WorkspacePermission.builder()//空权限对象 .ouId(p.getOuId()) .workspaceId(p.getWorkspaceId()) .isSuperAdmin(false) .permissionPoint(Collections.emptyList()) - .build()) - .collect(Collectors.toList()); - } - authPermission.forEach(p -> { - String key = KeyUtil.buildKeyBySeparator("auth", req.getIdentityId(), req.getIdentityType().getCode(), p.getOuId(), p.getWorkspaceId()); - cacheIdentityAuth(key, p); + .build()); + cacheIdentityAuth(AuthPermissionCacheKey.builder() + .personId(req.getPersonId()) + .identityId(req.getIdentityId()) + .identityType(req.getIdentityType().getCode()) + .ouId(p.getOuId()) + .workspaceId(p.getWorkspaceId()) + .build() + .buildKey(), permission); }); } @@ -781,6 +798,7 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { } private boolean needRefreshAuth(Long identityId, IdentityType identityType) { + //TODO:@Zhan 触发刷新逻辑检测 return false; }