feat:(REQ-3282) 恢复历史代码使用以前的项目权限查询接口

This commit is contained in:
李龙 2024-12-20 14:13:13 +08:00
parent 50350b8cd7
commit 346837150b
4 changed files with 215 additions and 22 deletions

View File

@ -20,6 +20,15 @@ public interface WorkspaceProductService {
*/ */
void storeWorkspaceProduct(StoreWorkspaceProductParam param); void storeWorkspaceProduct(StoreWorkspaceProductParam param);
/**
* 从缓存中查询项目的产品及产品的权限
* 没有切到listWorkspacePermissionCached后续有测试机会的时候切到listWorkspacePermissionCached
* @param param
* @return
*/
@Deprecated
List<WorkspaceProductPermission> listWorkspaceProductPermissionCached(ListWorkspaceProductPermissionCacheParam param);
/** /**
* 从缓存中查询项目的权限 * 从缓存中查询项目的权限
* @param param * @param param
@ -49,6 +58,35 @@ public interface WorkspaceProductService {
private Set<String> uniCodes; private Set<String> uniCodes;
} }
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class ListWorkspaceProductPermissionCacheParam {
/**
* 项目id
*/
private Set<Long> workspaceIds;
private Set<String> featureCodes;
/**
* 端信息
*/
private String terminal;
/**
* app类型APP:原生H5:h5页面
*/
private String appType;
/**
* 项目codeH5会拉取项目下所有的元素
* APP上每个应用的code数据库叫itemCode保持一致
*/
private String itemCode;
}
@Data @Data
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor

View File

@ -469,14 +469,11 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
// 查询的featureCodes有可能已经被删除但是saas_feature_code效率比较低两个表的id不会重复所以解析成id去过滤权限 // 查询的featureCodes有可能已经被删除但是saas_feature_code效率比较低两个表的id不会重复所以解析成id去过滤权限
Set<Long> featureIds = checkFeatureCodes(param); Set<Long> featureIds = checkFeatureCodes(param);
WorkspaceProductService.ListWorkspacePermissionCacheParam listWorkspacePermissionCacheParam = WorkspaceProductService.ListWorkspacePermissionCacheParam WorkspaceProductService.ListWorkspaceProductPermissionCacheParam listWorkspaceProductPermissionCacheParam = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.builder() .workspaceIds(Sets.newHashSet(param.getWorkspaceId()))
.workspacePermissions(Lists.newArrayList(WorkspaceProductService.WorkspacePermission.builder() .featureCodes(param.getFeatureCodes())
.workspaceId(param.getWorkspaceId())
.featureCodes(param.getFeatureCodes())
.build()))
.build(); .build();
List<ProductPermissionCacheService.PermissionDTO> productPermissions = workspaceProductService.listWorkspacePermissionCached(listWorkspacePermissionCacheParam) List<ProductPermissionCacheService.PermissionDTO> productPermissions = workspaceProductService.listWorkspaceProductPermissionCached(listWorkspaceProductPermissionCacheParam)
.stream() .stream()
.map(WorkspaceProductService.WorkspaceProductPermission::getProductPermissions) .map(WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)
.filter(e -> !CollectionUtils.isEmpty(e)) .filter(e -> !CollectionUtils.isEmpty(e))
@ -997,14 +994,11 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
// find product by workspace // find product by workspace
Set<Long> workspaceId = filterRoleAuths.stream().map(FilterRoleAuth::getWorkspaceId).collect(Collectors.toSet()); Set<Long> workspaceId = filterRoleAuths.stream().map(FilterRoleAuth::getWorkspaceId).collect(Collectors.toSet());
WorkspaceProductService.ListWorkspacePermissionCacheParam listWorkspacePermissionCacheParam = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() WorkspaceProductService.ListWorkspaceProductPermissionCacheParam listWorkspaceProductPermission = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspacePermissions(workspaceId.stream() .workspaceIds(workspaceId)
.map(e -> WorkspaceProductService.WorkspacePermission.builder()
.workspaceId(e)
.build())
.collect(Collectors.toList()))
.build(); .build();
Map<Long, List<WorkspaceProductService.ProductPermission>> workspaceProductPermissions = workspaceProductService.listWorkspacePermissionCached(listWorkspacePermissionCacheParam)
Map<Long, List<WorkspaceProductService.ProductPermission>> workspaceProductPermissions = workspaceProductService.listWorkspaceProductPermissionCached(listWorkspaceProductPermission)
.stream() .stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId,
WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
@ -1506,15 +1500,11 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
.map(IdentityAuthReq.WorkspaceOuPair::getWorkspaceId) .map(IdentityAuthReq.WorkspaceOuPair::getWorkspaceId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
// 查询项目的产品权限 // 查询项目的产品权限
WorkspaceProductService.ListWorkspacePermissionCacheParam listProductPermisssion = WorkspaceProductService.ListWorkspacePermissionCacheParam.builder() WorkspaceProductService.ListWorkspaceProductPermissionCacheParam listProductPermisssion = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspacePermissions(workspaceIds.stream() .workspaceIds(workspaceIds)
.map(workspaceId -> WorkspaceProductService.WorkspacePermission.builder() .featureCodes(identityAuthReq.getFeatureCode())
.workspaceId(workspaceId)
.featureCodes(identityAuthReq.getFeatureCode())
.build())
.collect(Collectors.toList()))
.build(); .build();
return workspaceProductService.listWorkspacePermissionCached(listProductPermisssion).stream() return workspaceProductService.listWorkspaceProductPermissionCached(listProductPermisssion).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, .collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId,
WorkspaceProductService.WorkspaceProductPermission::getProductPermissions)); WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
} }

View File

@ -159,6 +159,51 @@ public class WorkspaceProductServiceImpl implements WorkspaceProductService {
return String.format(WORKSPACE_PRODUCT_KEY); return String.format(WORKSPACE_PRODUCT_KEY);
} }
@Override
public List<WorkspaceProductPermission> listWorkspaceProductPermissionCached(ListWorkspaceProductPermissionCacheParam param) {
Map<Long, Set<Long>> workspaceProducts = listWorkspaceProduct(param.getWorkspaceIds());
Set<Long> productIds = workspaceProducts.values().stream()
.flatMap(Collection::stream)
.collect(Collectors.toSet());
if (CollectionUtils.isEmpty(productIds)) {
return Collections.emptyList();
}
ProductPermissionCacheService.ListProductPermissionParam listProductPermissionParam = ProductPermissionCacheService.ListProductPermissionParam.builder()
.productIds(productIds)
.featureCodes(param.getFeatureCodes())
.appType(param.getAppType())
.itemCode(param.getItemCode())
.terminal(param.getTerminal())
.build();
Map<Long, List<ProductPermissionCacheService.PermissionDTO>> productPermissionMap = productPermissionCacheService.list(listProductPermissionParam);
return workspaceProducts.entrySet().stream()
.filter(e -> CollectionUtils.isNotEmpty(e.getValue()))
.map(e -> {
List<ProductPermission> productPermissions = e.getValue().stream()
.map(productId -> {
List<ProductPermissionCacheService.PermissionDTO> permissions = productPermissionMap.get(productId);
if (CollectionUtils.isEmpty(permissions)) {
return null;
}
return ProductPermission.builder()
.productId(productId)
.permissions(permissions)
.build();
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
return WorkspaceProductPermission.builder()
.workspaceId(e.getKey())
.productPermissions(productPermissions)
.build();
})
.collect(Collectors.toList());
}
@Override @Override
public List<WorkspaceProductPermission> listWorkspacePermissionCached(ListWorkspacePermissionCacheParam param) { public List<WorkspaceProductPermission> listWorkspacePermissionCached(ListWorkspacePermissionCacheParam param) {
if (CollectionUtils.isEmpty(param.getWorkspacePermissions())) { if (CollectionUtils.isEmpty(param.getWorkspacePermissions())) {

View File

@ -20,6 +20,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.*;
class WorkspaceProductServiceImplTest extends BaseTest { class WorkspaceProductServiceImplTest extends BaseTest {
@Autowired @Autowired
@ -54,6 +56,124 @@ class WorkspaceProductServiceImplTest extends BaseTest {
.thenReturn(CommonResponse.success(Lists.newArrayList())); .thenReturn(CommonResponse.success(Lists.newArrayList()));
} }
@Test
void listWorkspaceProductPermissionCached() {
// workspace 没有product
WorkspaceProductService.ListWorkspaceProductPermissionCacheParam param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(11L))
.build();
List<WorkspaceProductService.WorkspaceProductPermission> workspaceProductPermissions = workspaceProductService.listWorkspaceProductPermissionCached(param);
Assertions.assertTrue(CollectionUtils.isEmpty(workspaceProductPermissions));
// workspace 没有product
// workspace 有productfeatureCode
param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(3L, 4L))
.featureCodes(Sets.newHashSet("h5:cmp_user_manage_worker_labor_audit_btn", "h5:cmp_allotted_time_page"))
.build();
Map<Long, List<WorkspaceProductService.ProductPermission>> workspacePermissions = workspaceProductService.listWorkspaceProductPermissionCached(param).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
Assertions.assertEquals(workspacePermissions.get(3L).size(), 1);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 1);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getCooperateType(), "1");
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getFeatureId(), 101745L);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getFeatureCode(), "h5:cmp_user_manage_worker_labor_audit_btn");
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getFeatureType(), 4);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getTerminal(), "NT_CMP_APP_GENERAL");
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getAppType(), "H5");
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().get(0).getItemCode(), "h5:user_manage_D9B0186");
// workspace 有productfeatureCode
// workspace 有productterminal
param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(3L))
.terminal("NT_CMP_APP_GENERAL")
.build();
workspacePermissions = workspaceProductService.listWorkspaceProductPermissionCached(param).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
Assertions.assertEquals(workspacePermissions.get(3L).size(), 1);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 7);
param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(3L))
.terminal("NT_CMP_APP_GENERAL_sdf")
.build();
workspacePermissions = workspaceProductService.listWorkspaceProductPermissionCached(param).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
Assertions.assertEquals(workspacePermissions.get(3L).size(), 0);
// workspace 有productterminal
// workspace 有productappType
param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(3L))
.appType("H5")
.build();
workspacePermissions = workspaceProductService.listWorkspaceProductPermissionCached(param).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
Assertions.assertEquals(workspacePermissions.get(3L).size(), 1);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 7);
param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(3L))
.appType("APP")
.build();
workspacePermissions = workspaceProductService.listWorkspaceProductPermissionCached(param).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
Assertions.assertEquals(workspacePermissions.get(3L).size(), 0);
// workspace 有productappType
// workspace 有productitemCode
param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(3L))
.itemCode("h5:user_manage_D9B0186")
.build();
workspacePermissions = workspaceProductService.listWorkspaceProductPermissionCached(param).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
Assertions.assertEquals(workspacePermissions.get(3L).size(), 1);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 7);
param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(3L))
.itemCode("h5:user_manage_D9B0186_sdf")
.build();
workspacePermissions = workspaceProductService.listWorkspaceProductPermissionCached(param).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
Assertions.assertEquals(workspacePermissions.get(3L).size(), 0);
// workspace 有productitemCode
// workspace 有productfeatureCodeterminalappTypeitemCode
param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(3L))
.featureCodes(Sets.newHashSet("h5:cmp_user_manage_worker_labor_audit_btn"))
.terminal("NT_CMP_APP_GENERAL")
.appType("H5")
.itemCode("h5:user_manage_D9B0186")
.build();
workspacePermissions = workspaceProductService.listWorkspaceProductPermissionCached(param).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
Assertions.assertEquals(workspacePermissions.get(3L).size(), 1);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getProductId(), 2L);
Assertions.assertEquals(workspacePermissions.get(3L).get(0).getPermissions().size(), 1);
param = WorkspaceProductService.ListWorkspaceProductPermissionCacheParam.builder()
.workspaceIds(Sets.newHashSet(3L))
.featureCodes(Sets.newHashSet("h5:cmp_user_manage_worker_labor_audit_btn"))
.terminal("NT_CMP_APP_GENERAL")
.appType("APP")
.itemCode("h5:user_manage_D9B0186_sdf")
.build();
workspacePermissions = workspaceProductService.listWorkspaceProductPermissionCached(param).stream()
.collect(Collectors.toMap(WorkspaceProductService.WorkspaceProductPermission::getWorkspaceId, WorkspaceProductService.WorkspaceProductPermission::getProductPermissions));
Assertions.assertEquals(workspacePermissions.get(3L).size(), 0);
// workspace 有productfeatureCodeterminalappTypeitemCode
}
@Test @Test
void listWorkspacePermissionCached() { void listWorkspacePermissionCached() {