From e2a4600e50db875d507b2c2826686caa2ce16c14 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Tue, 16 Apr 2024 11:52:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(2227-permissionQuery):=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=85=8D=E6=8E=88=E6=9D=83=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/service/SaasFeatureResourceService.java | 3 +++ .../service/impl/PermissionQueryServiceImpl.java | 14 +++++--------- .../impl/SaasFeatureResourceServiceImpl.java | 8 +++++++- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureResourceService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureResourceService.java index c4a612a9..9f631a73 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureResourceService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureResourceService.java @@ -9,6 +9,7 @@ import cn.axzo.tyr.client.model.req.FeatureResourceTreeSaveReq; import io.swagger.models.auth.In; import java.util.List; +import java.util.Set; /** * 功能资源服务 @@ -49,4 +50,6 @@ public interface SaasFeatureResourceService { List getTree(GetFeatureResourceTreeReq req); SaasFeatureResource getByCode(String featureCode); + + Set listAuthFree(); } 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 ef623460..ab004aea 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 @@ -205,6 +205,8 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { .collect(Collectors.toMap(RoleWithFeature::getRoleId, Function.identity())); Map> workspaceMap = workspaceFeatureRelations.stream() .collect(Collectors.groupingBy(WorkspaceFeatureRelation::getWorkspaceId)); + //免授权 + Set authFreeFeatureIds = featureResourceService.listAuthFree(); //按拥有的角色构建权限结果 Map result = new HashMap<>(); for (SaasRoleUserRelation relation : userRoleRelations) { @@ -234,7 +236,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { } } else { //普通角色权限 - permission.getFeatureIds().addAll(buildNormalPermission(role, allFeatures)); + permission.getFeatureIds().addAll(buildNormalPermission(role, allFeatures, authFreeFeatureIds)); } result.put(key, permission); @@ -242,20 +244,14 @@ public class PermissionQueryServiceImpl implements PermissionQueryService { return new ArrayList<>(result.values()); } - private List buildNormalPermission(RoleWithFeature role, List allFeatures) { - Set featureIds = featureResourceService.permissionQuery(ResourcePermissionQueryDTO.builder() - .authTypes(Collections.singletonList(FeatureResourceAuthType.ALL_ROLE.getCode())) - .build()) - .stream() - .map(ResourcePermission::getId) - .collect(Collectors.toSet()); + private List buildNormalPermission(RoleWithFeature role, List allFeatures, Set authFreeFeatureIds) { //普通角色:角色同类型的租户产品权限已分配 且角色上已分配 + 免授权 Set roleFeatures = role.getFeatureIds(); return allFeatures.stream() .filter(f -> Objects.equals(f.getProductUnitType(), role.getProductUnitType()) || !NumberUtil.isPositiveNumber(role.getProductUnitType())) .map(WorkspaceFeatureRelation::getFeatureId) - .filter(id -> roleFeatures.contains(id) || featureIds.contains(id)) + .filter(id -> roleFeatures.contains(id) || authFreeFeatureIds.contains(id)) .collect(Collectors.toList()); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java index 7e919c7e..59053c3d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java @@ -440,5 +440,11 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic } } - + @Override + public Set listAuthFree() { + return featureResourceDao.lambdaQuery() + .select(SaasFeatureResource::getId) + .eq(SaasFeatureResource::getAuthType, FeatureResourceAuthType.ALL_ROLE.getCode()) + .list().stream().map(SaasFeatureResource::getId).collect(Collectors.toSet()); + } }