|
22 | 22 | import org.lowcoder.api.home.UserHomeApiService;
|
23 | 23 | import org.lowcoder.api.permission.PermissionHelper;
|
24 | 24 | import org.lowcoder.api.permission.view.PermissionItemView;
|
| 25 | +import org.lowcoder.api.usermanagement.GroupApiService; |
| 26 | +import org.lowcoder.api.usermanagement.OrgApiService; |
25 | 27 | import org.lowcoder.api.usermanagement.OrgDevChecker;
|
| 28 | +import org.lowcoder.api.usermanagement.view.GroupView; |
| 29 | +import org.lowcoder.api.usermanagement.view.OrgMemberListView; |
26 | 30 | import org.lowcoder.domain.application.model.*;
|
27 | 31 | import org.lowcoder.domain.application.service.ApplicationHistorySnapshotService;
|
28 | 32 | import org.lowcoder.domain.application.service.ApplicationRecordService;
|
29 | 33 | import org.lowcoder.domain.application.service.ApplicationService;
|
30 | 34 | import org.lowcoder.domain.datasource.model.Datasource;
|
31 | 35 | import org.lowcoder.domain.datasource.service.DatasourceService;
|
32 | 36 | import org.lowcoder.domain.folder.service.FolderElementRelationService;
|
| 37 | +import org.lowcoder.domain.group.model.Group; |
| 38 | +import org.lowcoder.domain.group.model.GroupMember; |
33 | 39 | import org.lowcoder.domain.interaction.UserApplicationInteractionService;
|
| 40 | +import org.lowcoder.domain.organization.model.OrgMember; |
34 | 41 | import org.lowcoder.domain.organization.model.Organization;
|
35 | 42 | import org.lowcoder.domain.organization.service.OrgMemberService;
|
36 | 43 | import org.lowcoder.domain.organization.service.OrganizationService;
|
|
54 | 61 | import reactor.core.publisher.Flux;
|
55 | 62 | import reactor.core.publisher.Mono;
|
56 | 63 | import reactor.core.scheduler.Schedulers;
|
| 64 | +import reactor.util.function.Tuple2; |
57 | 65 |
|
58 | 66 | import java.time.Duration;
|
59 | 67 | import java.time.Instant;
|
60 |
| -import java.util.HashSet; |
61 |
| -import java.util.List; |
62 |
| -import java.util.Map; |
63 |
| -import java.util.Set; |
| 68 | +import java.util.*; |
64 | 69 | import java.util.stream.Collectors;
|
65 | 70 |
|
66 | 71 | import static org.lowcoder.domain.application.model.ApplicationStatus.NORMAL;
|
@@ -99,6 +104,8 @@ public class ApplicationApiServiceImpl implements ApplicationApiService {
|
99 | 104 | private final ApplicationHistorySnapshotService applicationHistorySnapshotService;
|
100 | 105 | private final ApplicationRecordService applicationRecordService;
|
101 | 106 | private final FolderElementRelationService folderElementRelationService;
|
| 107 | + private final GroupApiService groupApiService; |
| 108 | + private final OrgApiService orgApiService; |
102 | 109 |
|
103 | 110 | @Override
|
104 | 111 | public Mono<ApplicationView> create(CreateApplicationRequest createApplicationRequest) {
|
@@ -743,4 +750,62 @@ private Mono<Void> checkDatasourcePermissions(Application application) {
|
743 | 750 | });
|
744 | 751 | });
|
745 | 752 | }
|
| 753 | + |
| 754 | + @Override |
| 755 | + public Mono<List<Object>> getGroupsOrMembersWithoutPermissions(String appId) { |
| 756 | + return applicationService.findById(appId) |
| 757 | + .flatMap(application -> { |
| 758 | + String orgId = 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 | + return Mono.zip(groupPermissionPairsMono, userPermissionPairsMono, orgMemberListViewMono, groupsViewMono) |
| 770 | + .map(tuple -> { |
| 771 | + List<PermissionItemView> groupPermissionPairs = tuple.getT1(); |
| 772 | + List<PermissionItemView> userPermissionPairs = tuple.getT2(); |
| 773 | + OrgMemberListView orgMemberListViews = 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 = new HashMap<>(); |
| 784 | + map.put("type", "Group"); |
| 785 | + map.put("data", group); |
| 786 | + return map; |
| 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 = new HashMap<>(); |
| 798 | + map.put("type", "User"); |
| 799 | + map.put("data", member); |
| 800 | + return map; |
| 801 | + }) |
| 802 | + .toList(); |
| 803 | + |
| 804 | + List<Object> result = new ArrayList<>(); |
| 805 | + result.addAll(filteredGroups); |
| 806 | + result.addAll(filteredMembers); |
| 807 | + return result; |
| 808 | + }); |
| 809 | + }); |
| 810 | + } |
746 | 811 | }
|
0 commit comments