|
22 | 22 | importorg.lowcoder.api.home.UserHomeApiService;
|
23 | 23 | importorg.lowcoder.api.permission.PermissionHelper;
|
24 | 24 | importorg.lowcoder.api.permission.view.PermissionItemView;
|
| 25 | +importorg.lowcoder.api.usermanagement.GroupApiService; |
| 26 | +importorg.lowcoder.api.usermanagement.OrgApiService; |
25 | 27 | importorg.lowcoder.api.usermanagement.OrgDevChecker;
|
| 28 | +importorg.lowcoder.api.usermanagement.view.GroupView; |
| 29 | +importorg.lowcoder.api.usermanagement.view.OrgMemberListView; |
26 | 30 | importorg.lowcoder.domain.application.model.*;
|
27 | 31 | importorg.lowcoder.domain.application.service.ApplicationHistorySnapshotService;
|
28 | 32 | importorg.lowcoder.domain.application.service.ApplicationRecordService;
|
29 | 33 | importorg.lowcoder.domain.application.service.ApplicationService;
|
30 | 34 | importorg.lowcoder.domain.datasource.model.Datasource;
|
31 | 35 | importorg.lowcoder.domain.datasource.service.DatasourceService;
|
32 | 36 | importorg.lowcoder.domain.folder.service.FolderElementRelationService;
|
| 37 | +importorg.lowcoder.domain.group.model.Group; |
| 38 | +importorg.lowcoder.domain.group.model.GroupMember; |
33 | 39 | importorg.lowcoder.domain.interaction.UserApplicationInteractionService;
|
| 40 | +importorg.lowcoder.domain.organization.model.OrgMember; |
34 | 41 | importorg.lowcoder.domain.organization.model.Organization;
|
35 | 42 | importorg.lowcoder.domain.organization.service.OrgMemberService;
|
36 | 43 | importorg.lowcoder.domain.organization.service.OrganizationService;
|
|
54 | 61 | importreactor.core.publisher.Flux;
|
55 | 62 | importreactor.core.publisher.Mono;
|
56 | 63 | importreactor.core.scheduler.Schedulers;
|
| 64 | +importreactor.util.function.Tuple2; |
57 | 65 |
|
58 | 66 | importjava.time.Duration;
|
59 | 67 | importjava.time.Instant;
|
60 |
| -importjava.util.HashSet; |
61 |
| -importjava.util.List; |
62 |
| -importjava.util.Map; |
63 |
| -importjava.util.Set; |
| 68 | +importjava.util.*; |
64 | 69 | importjava.util.stream.Collectors;
|
65 | 70 |
|
66 | 71 | importstaticorg.lowcoder.domain.application.model.ApplicationStatus.NORMAL;
|
@@ -99,6 +104,8 @@ public class ApplicationApiServiceImpl implements ApplicationApiService {
|
99 | 104 | privatefinalApplicationHistorySnapshotServiceapplicationHistorySnapshotService;
|
100 | 105 | privatefinalApplicationRecordServiceapplicationRecordService;
|
101 | 106 | privatefinalFolderElementRelationServicefolderElementRelationService;
|
| 107 | +privatefinalGroupApiServicegroupApiService; |
| 108 | +privatefinalOrgApiServiceorgApiService; |
102 | 109 |
|
103 | 110 | @Override
|
104 | 111 | publicMono<ApplicationView>create(CreateApplicationRequestcreateApplicationRequest) {
|
@@ -743,4 +750,62 @@ private Mono<Void> checkDatasourcePermissions(Application application) {
|
743 | 750 | });
|
744 | 751 | });
|
745 | 752 | }
|
| 753 | + |
| 754 | +@Override |
| 755 | +publicMono<List<Object>>getGroupsOrMembersWithoutPermissions(StringappId) { |
| 756 | +returnapplicationService.findById(appId) |
| 757 | + .flatMap(application -> { |
| 758 | +StringorgId =application.getOrganizationId(); |
| 759 | +Mono<List<ResourcePermission>>applicationPermissions =resourcePermissionService.getByApplicationId(application.getId()).cache(); |
| 760 | + |
| 761 | +Mono<List<PermissionItemView>>groupPermissionPairsMono =applicationPermissions |
| 762 | + .flatMap(permissionHelper::getGroupPermissions); |
| 763 | + |
| 764 | +Mono<List<PermissionItemView>>userPermissionPairsMono =applicationPermissions |
| 765 | + .flatMap(permissionHelper::getUserPermissions); |
| 766 | +Mono<OrgMemberListView>orgMemberListViewMono =orgApiService.getOrganizationMembers(orgId,1,0); |
| 767 | +Mono<List<GroupView>>groupsViewMono =groupApiService.getGroups(); |
| 768 | + |
| 769 | +returnMono.zip(groupPermissionPairsMono,userPermissionPairsMono,orgMemberListViewMono,groupsViewMono) |
| 770 | + .map(tuple -> { |
| 771 | +List<PermissionItemView>groupPermissionPairs =tuple.getT1(); |
| 772 | +List<PermissionItemView>userPermissionPairs =tuple.getT2(); |
| 773 | +OrgMemberListVieworgMemberListViews =tuple.getT3(); |
| 774 | +List<GroupView>groupListViews =tuple.getT4(); |
| 775 | + |
| 776 | +Set<String>groupIdsWithPerm =groupPermissionPairs.stream() |
| 777 | + .map(PermissionItemView::getId) |
| 778 | + .collect(Collectors.toSet()); |
| 779 | + |
| 780 | +List<Map<String,Object>>filteredGroups =groupListViews.stream() |
| 781 | + .filter(group -> !groupIdsWithPerm.contains(group.getGroupId())) |
| 782 | + .map(group -> { |
| 783 | +Map<String,Object>map =newHashMap<>(); |
| 784 | +map.put("type","Group"); |
| 785 | +map.put("data",group); |
| 786 | +returnmap; |
| 787 | + }) |
| 788 | + .toList(); |
| 789 | + |
| 790 | +Set<String>userIdsWithPerm =userPermissionPairs.stream() |
| 791 | + .map(PermissionItemView::getId) |
| 792 | + .collect(Collectors.toSet()); |
| 793 | + |
| 794 | +List<Map<String,Object>>filteredMembers =orgMemberListViews.getMembers().stream() |
| 795 | + .filter(member -> !userIdsWithPerm.contains(member.getUserId())) |
| 796 | + .map(member -> { |
| 797 | +Map<String,Object>map =newHashMap<>(); |
| 798 | +map.put("type","User"); |
| 799 | +map.put("data",member); |
| 800 | +returnmap; |
| 801 | + }) |
| 802 | + .toList(); |
| 803 | + |
| 804 | +List<Object>result =newArrayList<>(); |
| 805 | +result.addAll(filteredGroups); |
| 806 | +result.addAll(filteredMembers); |
| 807 | +returnresult; |
| 808 | + }); |
| 809 | + }); |
| 810 | + } |
746 | 811 | }
|