Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2de9c43

Browse files
committed
feat: add unified datasource available members endpoint
1 parent9a52ed3 commit2de9c43

File tree

4 files changed

+146
-21
lines changed

4 files changed

+146
-21
lines changed

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/DatasourceApiService.java‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
packageorg.lowcoder.api.datasource;
22

3-
importjakarta.annotation.Nullable;
3+
importjava.util.List;
4+
importjava.util.Set;
5+
46
importorg.lowcoder.api.permission.view.CommonPermissionView;
57
importorg.lowcoder.domain.datasource.model.Datasource;
68
importorg.lowcoder.domain.permission.model.ResourceRole;
79
importorg.lowcoder.domain.plugin.client.dto.GetPluginDynamicConfigRequestDTO;
810
importorg.lowcoder.sdk.models.DatasourceTestResult;
9-
importorg.springframework.web.bind.annotation.RequestParam;
11+
12+
importjakarta.annotation.Nullable;
1013
importreactor.core.publisher.Flux;
1114
importreactor.core.publisher.Mono;
1215

13-
importjava.util.List;
14-
importjava.util.Set;
15-
1616
publicinterfaceDatasourceApiService {
1717
Mono<Datasource>create(Datasourcedatasource);
1818

@@ -41,4 +41,6 @@ public interface DatasourceApiService {
4141
Mono<Boolean>updatePermission(StringpermissionId,ResourceRolerole);
4242

4343
Mono<Boolean>deletePermission(StringpermissionId);
44+
45+
Mono<List<Object>>getGroupsOrMembersWithoutPermissions(StringdatasourceId);
4446
}

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/DatasourceApiServiceImpl.java‎

Lines changed: 85 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,31 @@
11
packageorg.lowcoder.api.datasource;
22

3-
importcom.github.f4b6a3.uuid.UuidCreator;
4-
importjakarta.annotation.Nullable;
5-
importlombok.RequiredArgsConstructor;
3+
importstaticorg.lowcoder.domain.permission.model.ResourceAction.MANAGE_DATASOURCES;
4+
importstaticorg.lowcoder.domain.permission.model.ResourceAction.READ_APPLICATIONS;
5+
importstaticorg.lowcoder.domain.permission.model.ResourceAction.USE_DATASOURCES;
6+
importstaticorg.lowcoder.sdk.exception.BizError.NOT_AUTHORIZED;
7+
importstaticorg.lowcoder.sdk.util.ExceptionUtils.deferredError;
8+
9+
importjava.util.ArrayList;
10+
importjava.util.Collections;
11+
importjava.util.HashMap;
12+
importjava.util.List;
13+
importjava.util.Map;
14+
importjava.util.Set;
15+
importjava.util.stream.Collectors;
16+
617
importorg.apache.commons.collections4.CollectionUtils;
718
importorg.apache.commons.lang3.StringUtils;
819
importorg.lowcoder.api.application.ApplicationApiService;
920
importorg.lowcoder.api.home.SessionUserService;
1021
importorg.lowcoder.api.permission.PermissionHelper;
1122
importorg.lowcoder.api.permission.view.CommonPermissionView;
1223
importorg.lowcoder.api.permission.view.PermissionItemView;
24+
importorg.lowcoder.api.usermanagement.GroupApiService;
25+
importorg.lowcoder.api.usermanagement.OrgApiService;
1326
importorg.lowcoder.api.usermanagement.OrgDevChecker;
27+
importorg.lowcoder.api.usermanagement.view.GroupView;
28+
importorg.lowcoder.api.usermanagement.view.OrgMemberListView;
1429
importorg.lowcoder.domain.application.service.ApplicationService;
1530
importorg.lowcoder.domain.datasource.model.Datasource;
1631
importorg.lowcoder.domain.datasource.model.DatasourceStatus;
@@ -38,18 +53,13 @@
3853
importorg.lowcoder.sdk.models.HasIdAndAuditing;
3954
importorg.lowcoder.sdk.models.JsDatasourceConnectionConfig;
4055
importorg.springframework.stereotype.Service;
41-
importreactor.core.publisher.Flux;
42-
importreactor.core.publisher.Mono;
4356

44-
importjava.util.Collections;
45-
importjava.util.List;
46-
importjava.util.Map;
47-
importjava.util.Set;
48-
importjava.util.stream.Collectors;
57+
importcom.github.f4b6a3.uuid.UuidCreator;
4958

50-
importstaticorg.lowcoder.domain.permission.model.ResourceAction.*;
51-
importstaticorg.lowcoder.sdk.exception.BizError.NOT_AUTHORIZED;
52-
importstaticorg.lowcoder.sdk.util.ExceptionUtils.deferredError;
59+
importjakarta.annotation.Nullable;
60+
importlombok.RequiredArgsConstructor;
61+
importreactor.core.publisher.Flux;
62+
importreactor.core.publisher.Mono;
5363

5464
@RequiredArgsConstructor
5565
@Service
@@ -71,6 +81,8 @@ public class DatasourceApiServiceImpl implements DatasourceApiService {
7181
privatefinalDatasourcePluginClientdatasourcePluginClient;
7282
privatefinalDatasourceRepositorydatasourceRepository;
7383
privatefinalApplicationApiServiceapplicationApiService;
84+
privatefinalOrgApiServiceorgApiService;
85+
privatefinalGroupApiServicegroupApiService;
7486

7587
@Override
7688
publicMono<Datasource>create(Datasourcedatasource) {
@@ -267,6 +279,66 @@ public Mono<Boolean> grantPermission(String datasourceId, @Nullable Set<String>
267279
.thenReturn(true);
268280
}
269281

282+
@Override
283+
publicMono<List<Object>>getGroupsOrMembersWithoutPermissions(StringdatasourceId) {
284+
returndatasourceService.getById(datasourceId)
285+
.switchIfEmpty(Mono.error(newServerException("data source not exist. {}",datasourceId)))
286+
.flatMap(datasource -> {
287+
StringorgId =datasource.getOrganizationId();
288+
Mono<List<ResourcePermission>>datasourcePermissions =resourcePermissionService.getByDataSourceId(datasource.getId()).cache();
289+
290+
Mono<List<PermissionItemView>>groupPermissionPairsMono =datasourcePermissions
291+
.flatMap(permissionHelper::getGroupPermissions);
292+
293+
Mono<List<PermissionItemView>>userPermissionPairsMono =datasourcePermissions
294+
.flatMap(permissionHelper::getUserPermissions);
295+
Mono<OrgMemberListView>orgMemberListViewMono =orgApiService.getOrganizationMembers(orgId,1,0);
296+
Mono<List<GroupView>>groupsViewMono =groupApiService.getGroups();
297+
298+
returnMono.zip(groupPermissionPairsMono,userPermissionPairsMono,orgMemberListViewMono,groupsViewMono)
299+
.map(tuple -> {
300+
List<PermissionItemView>groupPermissionPairs =tuple.getT1();
301+
List<PermissionItemView>userPermissionPairs =tuple.getT2();
302+
OrgMemberListVieworgMemberListViews =tuple.getT3();
303+
List<GroupView>groupListViews =tuple.getT4();
304+
305+
Set<String>groupIdsWithPerm =groupPermissionPairs.stream()
306+
.map(PermissionItemView::getId)
307+
.collect(java.util.stream.Collectors.toSet());
308+
309+
List<java.util.Map<String,Object>>filteredGroups =groupListViews.stream()
310+
.filter(group -> !groupIdsWithPerm.contains(group.getGroupId()))
311+
.map(group -> {
312+
java.util.Map<String,Object>map =newjava.util.HashMap<>();
313+
map.put("type","Group");
314+
map.put("data",group);
315+
returnmap;
316+
})
317+
.toList();
318+
319+
Set<String>userIdsWithPerm =userPermissionPairs.stream()
320+
.map(PermissionItemView::getId)
321+
.collect(java.util.stream.Collectors.toSet());
322+
323+
List<Map<String,Object>>filteredMembers =orgMemberListViews.getMembers().stream()
324+
.filter(member -> !userIdsWithPerm.contains(member.getUserId()))
325+
.map(member -> {
326+
Map<String,Object>map =newHashMap<>();
327+
map.put("type","User");
328+
map.put("data",member);
329+
returnmap;
330+
})
331+
.toList();
332+
333+
List<Object>result =newArrayList<>();
334+
result.addAll(filteredGroups);
335+
result.addAll(filteredMembers);
336+
returnresult;
337+
});
338+
});
339+
}
340+
341+
270342
@Override
271343
publicMono<Boolean>updatePermission(StringpermissionId,ResourceRolerole) {
272344
returncheckBeforePermissionDeleteOrUpdate(permissionId)

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/DatasourceController.java‎

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
importorg.lowcoder.api.framework.view.PageResponseView;
1111
importorg.lowcoder.api.framework.view.ResponseView;
1212
importorg.lowcoder.api.permission.view.CommonPermissionView;
13+
importorg.lowcoder.api.usermanagement.view.GroupView;
14+
importorg.lowcoder.api.usermanagement.view.OrgMemberListView;
1315
importorg.lowcoder.api.usermanagement.view.UpdateGroupRequest;
1416
importorg.lowcoder.api.util.BusinessEventPublisher;
1517
importorg.lowcoder.api.util.GidService;
@@ -26,17 +28,17 @@
2628
importorg.springframework.web.bind.annotation.RequestBody;
2729
importorg.springframework.web.bind.annotation.RequestParam;
2830
importorg.springframework.web.bind.annotation.RestController;
31+
importreactor.core.publisher.Flux;
2932
importreactor.core.publisher.Mono;
3033

31-
importjava.util.Collections;
32-
importjava.util.List;
33-
importjava.util.Locale;
34+
importjava.util.*;
3435

3536
importstaticorg.lowcoder.api.util.Pagination.fluxToPageResponseView;
3637
importstaticorg.lowcoder.plugin.api.event.LowcoderEvent.EventType.*;
3738
importstaticorg.lowcoder.sdk.exception.BizError.INVALID_PARAMETER;
3839
importstaticorg.lowcoder.sdk.util.ExceptionUtils.ofError;
3940
importstaticorg.lowcoder.sdk.util.LocaleUtils.getLocale;
41+
importstaticreactor.core.publisher.Flux.fromIterable;
4042

4143
@RequiredArgsConstructor
4244
@RestController
@@ -227,4 +229,38 @@ public Mono<ResponseView<Object>> info(@RequestParam(required = false) String da
227229
Mono.just(ResponseView.success(datasourceApiService.info(objectId))));
228230
}
229231

232+
@Override
233+
publicMono<PageResponseView<?>>getGroupsOrMembersWithoutPermissions(
234+
@PathVariableStringdatasourceId,
235+
@RequestParam(required =false)Stringsearch,
236+
@RequestParam(required =false,defaultValue ="1")IntegerpageNum,
237+
@RequestParam(required =false,defaultValue ="1000")IntegerpageSize) {
238+
239+
returngidService.convertDatasourceIdToObjectId(datasourceId).flatMap(dsId -> {
240+
varflx =datasourceApiService.getGroupsOrMembersWithoutPermissions(dsId)
241+
.flatMapMany(Flux::fromIterable)
242+
.filter(item -> {
243+
if (search ==null ||search.isBlank())returntrue;
244+
if (!(iteminstanceofMapmap))returnfalse;
245+
Objecttype =map.get("type");
246+
Objectdata =map.get("data");
247+
if ("Group".equals(type) &&datainstanceofGroupViewgroup) {
248+
returngroup.getGroupName() !=null &&group.getGroupName().toLowerCase().contains(search.toLowerCase());
249+
}
250+
if ("User".equals(type) &&datainstanceofOrgMemberListView.OrgMemberViewuser) {
251+
returnuser.getName() !=null &&user.getName().toLowerCase().contains(search.toLowerCase());
252+
}
253+
returnfalse;
254+
})
255+
.cache();
256+
varcountMono =flx.count();
257+
varflux1 =flx.skip((long) (pageNum -1) *pageSize);
258+
if (pageSize >0)flux1 =flux1.take(pageSize);
259+
returnflux1.collectList()
260+
.zipWith(countMono)
261+
.map(tuple ->PageResponseView.success(tuple.getT1(),pageNum,pageSize,Math.toIntExact(tuple.getT2())));
262+
});
263+
}
264+
265+
230266
}

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/DatasourceEndpoints.java‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,21 @@ public Mono<ResponseView<Boolean>> updatePermission(@PathVariable("permissionId"
190190
@GetMapping("/info")
191191
publicMono<ResponseView<Object>>info(@RequestParam(required =false)StringdatasourceId);
192192

193+
194+
@Operation(
195+
tags =TAG_DATASOURCE_PERMISSIONS,
196+
operationId ="listGroupsOrMembersWithoutPermissionsForDatasource",
197+
summary ="Get groups or members without permissions for datasource",
198+
description ="Retrieve the groups or members of a specific datasource identified by its ID that do not have permissions."
199+
)
200+
@GetMapping("/{datasourceId}/available")
201+
publicMono<PageResponseView<?>>getGroupsOrMembersWithoutPermissions(
202+
@PathVariableStringdatasourceId,
203+
@RequestParam(required =false)Stringsearch,
204+
@RequestParam(required =false,defaultValue ="1")IntegerpageNum,
205+
@RequestParam(required =false,defaultValue ="1000")IntegerpageSize
206+
);
207+
193208
publicrecordBatchAddPermissionRequest(Stringrole,Set<String>userIds,Set<String>groupIds) {
194209
}
195210

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp