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)