Skip to content

Commit 75443cd

Browse files
authored
Merge pull request lowcoder-org#109 from lvhuichao/develop
1. fix authRequestFactory autowire 2. fix system data source permission check
2 parents 125267d + 51b0c41 commit 75443cd

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

server/openblocks-domain/src/main/java/com/openblocks/domain/permission/service/DatasourcePermissionHandler.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,36 @@
11
package com.openblocks.domain.permission.service;
22

3+
import static com.openblocks.domain.permission.model.ResourceHolder.USER;
4+
import static com.openblocks.sdk.constants.Authentication.ANONYMOUS_USER_ID;
5+
36
import java.util.Collection;
47
import java.util.Collections;
58
import java.util.List;
69
import java.util.Map;
10+
import java.util.function.Function;
11+
import java.util.stream.Collectors;
712

13+
import org.apache.commons.collections4.CollectionUtils;
814
import org.springframework.beans.factory.annotation.Autowired;
915
import org.springframework.context.annotation.Lazy;
1016
import org.springframework.stereotype.Component;
1117

18+
import com.google.common.collect.Maps;
1219
import com.openblocks.domain.datasource.model.Datasource;
1320
import com.openblocks.domain.datasource.service.DatasourceService;
1421
import com.openblocks.domain.permission.model.ResourceAction;
1522
import com.openblocks.domain.permission.model.ResourcePermission;
23+
import com.openblocks.domain.permission.model.ResourceRole;
24+
import com.openblocks.domain.permission.model.ResourceType;
1625

1726
import reactor.core.publisher.Mono;
1827

1928
@Lazy
2029
@Component
2130
class DatasourcePermissionHandler extends ResourcePermissionHandler {
2231

32+
private static final ResourceRole SYSTEM_STATIC_DATASOURCE_USER_ROLE = ResourceRole.OWNER;
33+
2334
@Autowired
2435
private DatasourceService datasourceService;
2536

@@ -33,4 +44,39 @@ protected Mono<String> getOrgId(String resourceId) {
3344
return datasourceService.getById(resourceId)
3445
.map(Datasource::getOrganizationId);
3546
}
47+
48+
@Override
49+
public Mono<Map<String, List<ResourcePermission>>> getAllMatchingPermissions(String userId, Collection<String> resourceIds,
50+
ResourceAction resourceAction) {
51+
52+
List<String> systemStaticDatasourceIds = resourceIds.stream()
53+
.filter(Datasource::isSystemStaticId)
54+
.toList();
55+
List<String> nonSystemStaticDatasourceIds = resourceIds.stream()
56+
.filter(Datasource::isNotSystemStaticId)
57+
.toList();
58+
59+
if (CollectionUtils.isEmpty(systemStaticDatasourceIds)) {
60+
return super.getAllMatchingPermissions(userId, nonSystemStaticDatasourceIds, resourceAction);
61+
}
62+
return super.getAllMatchingPermissions(userId, nonSystemStaticDatasourceIds, resourceAction)
63+
.map(allMatchingPermissions -> {
64+
Map<String, List<ResourcePermission>> result = Maps.newHashMap();
65+
Map<String, List<ResourcePermission>> systemStaticDatasourcePermissions = systemStaticDatasourceIds.stream()
66+
.collect(Collectors.toMap(Function.identity(), id -> getSystemStaticDatasourcePermission(userId, id)));
67+
result.putAll(systemStaticDatasourcePermissions);
68+
result.putAll(allMatchingPermissions);
69+
return result;
70+
});
71+
}
72+
73+
private List<ResourcePermission> getSystemStaticDatasourcePermission(String userId, String datasourceId) {
74+
return Collections.singletonList(ResourcePermission.builder()
75+
.resourceId(datasourceId)
76+
.resourceType(ResourceType.DATASOURCE)
77+
.resourceHolder(USER)
78+
.resourceHolderId(userId)
79+
.resourceRole(SYSTEM_STATIC_DATASOURCE_USER_ROLE)
80+
.build());
81+
}
3682
}

server/openblocks-server/src/main/java/com/openblocks/api/authentication/request/AuthRequestFactoryFacade.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@
2222
@Slf4j
2323
@Primary
2424
@Component
25+
@SuppressWarnings({"rawtypes", "unchecked"})
2526
public class AuthRequestFactoryFacade implements AuthRequestFactory<AuthRequestContext> {
2627

2728
@Autowired
28-
private List<AuthRequestFactory<AuthRequestContext>> authRequestFactories;
29+
private List<AuthRequestFactory> authRequestFactories;
2930

3031
private final Map<String, AuthRequestFactory<AuthRequestContext>> authRequestFactoryMap = new HashMap<>();
3132

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy