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

Commit085c802

Browse files
Thomasrludomikula
Thomasr
authored andcommitted
Added before/after detail of data source permission update event
1 parent6cff307 commit085c802

File tree

4 files changed

+79
-34
lines changed

4 files changed

+79
-34
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
packageorg.lowcoder.infra.event;
2+
3+
importlombok.Getter;
4+
importlombok.experimental.SuperBuilder;
5+
6+
@Getter
7+
@SuperBuilder
8+
publicclassDatasourceResourcePermissionEventextendsAbstractEvent {
9+
10+
privatefinalStringdatasourceId;
11+
privatefinalStringname;
12+
privatefinalStringtype;
13+
14+
privatefinalObjectoldPermission;
15+
privatefinalObjectnewPermission;
16+
17+
privatefinalEventTypeeventType;
18+
}

‎server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/datasource/DatasourcePermissionEvent.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
importorg.lowcoder.infra.event.AbstractEvent;
66

77
importjava.util.Collection;
8+
importjava.util.List;
89

910
@Getter
1011
@SuperBuilder
@@ -18,5 +19,8 @@ public class DatasourcePermissionEvent extends AbstractEvent {
1819
privatefinalCollection<String>groupIds;
1920
privatefinalStringrole;
2021

22+
privatefinalList<?>oldPermissions;
23+
privatefinalList<?>newPermissions;
24+
2125
privatefinalEventTypeeventType;
2226
}

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

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
importorg.lowcoder.domain.datasource.service.DatasourceService;
1818
importorg.lowcoder.domain.datasource.service.DatasourceStructureService;
1919
importorg.lowcoder.domain.permission.model.ResourceRole;
20+
importorg.lowcoder.domain.permission.service.ResourcePermissionService;
2021
importorg.lowcoder.domain.plugin.client.dto.GetPluginDynamicConfigRequestDTO;
2122
importorg.lowcoder.sdk.exception.BizError;
2223
importorg.lowcoder.sdk.models.DatasourceStructure;
@@ -48,6 +49,7 @@ public class DatasourceController implements DatasourceEndpoints
4849
privatefinalBusinessEventPublisherbusinessEventPublisher;
4950
privatefinalDatasourceServicedatasourceService;
5051
privatefinalGidServicegidService;
52+
privatefinalResourcePermissionServiceresourcePermissionService;
5153

5254
@Override
5355
publicMono<ResponseView<Datasource>>create(@Valid@RequestBodyUpsertDatasourceRequestrequest) {
@@ -180,15 +182,17 @@ public Mono<ResponseView<Boolean>> grantPermission(@PathVariable String datasour
180182
returnofError(INVALID_PARAMETER,"INVALID_PARAMETER",request.role());
181183
}
182184
returngidService.convertDatasourceIdToObjectId(datasourceId).flatMap(objectId ->
183-
datasourceApiService.grantPermission(objectId,request.userIds(),request.groupIds(),role)
184-
.delayUntil(result -> {
185-
if (BooleanUtils.isTrue(result)) {
186-
returnbusinessEventPublisher.publishDatasourcePermissionEvent(objectId,request.userIds(),
187-
request.groupIds(),request.role(),DATA_SOURCE_PERMISSION_GRANT);
188-
}
189-
returnMono.empty();
190-
})
191-
.map(ResponseView::success));
185+
datasourceApiService.getPermissions(objectId).flatMap(oldPermissions ->
186+
datasourceApiService.grantPermission(objectId,request.userIds(),request.groupIds(),role)
187+
.delayUntil(result -> {
188+
if (BooleanUtils.isTrue(result)) {
189+
returndatasourceApiService.getPermissions(objectId).flatMap(newPermissions ->
190+
businessEventPublisher.publishDatasourcePermissionEvent(objectId,request.userIds(),
191+
request.groupIds(),request.role(),DATA_SOURCE_PERMISSION_GRANT,oldPermissions,newPermissions));
192+
}
193+
returnMono.empty();
194+
})
195+
.map(ResponseView::success)));
192196
}
193197

194198
@Override
@@ -197,21 +201,24 @@ public Mono<ResponseView<Boolean>> updatePermission(@PathVariable("permissionId"
197201
if (request.getResourceRole() ==null) {
198202
returnofError(INVALID_PARAMETER,"INVALID_PARAMETER",request.role());
199203
}
200-
returndatasourceApiService.updatePermission(permissionId,request.getResourceRole())
204+
returnresourcePermissionService.getById(permissionId).flatMap(oldPermission ->
205+
datasourceApiService.updatePermission(permissionId,request.getResourceRole())
201206
.delayUntil(result -> {
202207
if (BooleanUtils.isTrue(result)) {
203-
returnbusinessEventPublisher.publishDatasourcePermissionEvent(permissionId,DATA_SOURCE_PERMISSION_UPDATE);
208+
returnresourcePermissionService.getById(permissionId).flatMap(newPermission ->
209+
businessEventPublisher.publishDatasourceResourcePermissionEvent(DATA_SOURCE_PERMISSION_UPDATE,oldPermission,newPermission));
204210
}
205211
returnMono.empty();
206212
})
207-
.map(ResponseView::success);
213+
.map(ResponseView::success));
208214
}
209215

210216
@Override
211217
publicMono<ResponseView<Boolean>>deletePermission(@PathVariable("permissionId")StringpermissionId) {
212-
returnbusinessEventPublisher.publishDatasourcePermissionEvent(permissionId,DATA_SOURCE_PERMISSION_DELETE)
218+
returnresourcePermissionService.getById(permissionId).flatMap(oldPermission ->
219+
businessEventPublisher.publishDatasourceResourcePermissionEvent(DATA_SOURCE_PERMISSION_DELETE,oldPermission,null)
213220
.then(datasourceApiService.deletePermission(permissionId))
214-
.map(ResponseView::success);
221+
.map(ResponseView::success));
215222
}
216223

217224
@Override

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
importorg.lowcoder.api.application.view.ApplicationPublishRequest;
1111
importorg.lowcoder.api.application.view.ApplicationView;
1212
importorg.lowcoder.api.home.SessionUserService;
13+
importorg.lowcoder.api.permission.view.CommonPermissionView;
1314
importorg.lowcoder.api.usermanagement.view.AddMemberRequest;
1415
importorg.lowcoder.api.usermanagement.view.UpdateRoleRequest;
1516
importorg.lowcoder.domain.application.model.Application;
@@ -710,34 +711,16 @@ public Mono<Void> publishDatasourceEvent(Datasource datasource, EventType eventT
710711
});
711712
}
712713

713-
publicMono<Void>publishDatasourcePermissionEvent(StringpermissionId,EventTypeeventType) {
714-
returnresourcePermissionService.getById(permissionId)
715-
.zipWhen(resourcePermission ->datasourceService.getById(resourcePermission.getResourceId()))
716-
.flatMap(tuple -> {
717-
ResourcePermissionresourcePermission =tuple.getT1();
718-
ResourceHolderholder =resourcePermission.getResourceHolder();
719-
Datasourcedatasource =tuple.getT2();
720-
returnpublishDatasourcePermissionEvent(datasource.getId(),
721-
holder ==USER ?List.of(resourcePermission.getResourceHolderId()) :Collections.emptyList(),
722-
holder ==USER ?Collections.emptyList() :List.of(resourcePermission.getResourceHolderId()),
723-
resourcePermission.getResourceRole().getValue(),
724-
eventType);
725-
})
726-
.onErrorResume(throwable -> {
727-
log.error("publishDatasourcePermissionEvent error.",throwable);
728-
returnMono.empty();
729-
});
730-
}
731-
732714
publicMono<Void>publishDatasourcePermissionEvent(StringdatasourceId,
733715
Collection<String>userIds,Collection<String>groupIds,Stringrole,
734-
EventTypeeventType) {
716+
EventTypeeventType,CommonPermissionViewoldPermissions,CommonPermissionViewnewPermissions) {
735717
returnMono.zip(sessionUserService.getVisitorOrgMemberCache(),
736718
datasourceService.getById(datasourceId),
737719
sessionUserService.getVisitorToken())
738720
.flatMap(tuple -> {
739721
OrgMemberorgMember =tuple.getT1();
740722
Datasourcedatasource =tuple.getT2();
723+
741724
DatasourcePermissionEventdatasourcePermissionEvent =DatasourcePermissionEvent.builder()
742725
.datasourceId(datasourceId)
743726
.name(datasource.getName())
@@ -746,6 +729,8 @@ public Mono<Void> publishDatasourcePermissionEvent(String datasourceId,
746729
.orgId(orgMember.getOrgId())
747730
.userIds(userIds)
748731
.groupIds(groupIds)
732+
.newPermissions(newPermissions==null?null:newPermissions.getPermissions())
733+
.oldPermissions(oldPermissions==null?null:oldPermissions.getPermissions())
749734
.role(role)
750735
.eventType(eventType)
751736
.isAnonymous(Authentication.isAnonymousUser(orgMember.getUserId()))
@@ -763,6 +748,37 @@ public Mono<Void> publishDatasourcePermissionEvent(String datasourceId,
763748
});
764749
}
765750

751+
publicMono<Void>publishDatasourceResourcePermissionEvent(EventTypeeventType,ResourcePermissionoldPermission,ResourcePermissionnewPermission) {
752+
returnMono.zip(sessionUserService.getVisitorOrgMemberCache(),
753+
datasourceService.getById(oldPermission.getResourceId()),
754+
sessionUserService.getVisitorToken())
755+
.flatMap(tuple -> {
756+
OrgMemberorgMember =tuple.getT1();
757+
Datasourcedatasource =tuple.getT2();
758+
759+
DatasourceResourcePermissionEventdatasourceResourcePermissionEvent =DatasourceResourcePermissionEvent.builder()
760+
.name(datasource.getName())
761+
.type(datasource.getType())
762+
.userId(orgMember.getUserId())
763+
.orgId(orgMember.getOrgId())
764+
.newPermission(newPermission)
765+
.oldPermission(oldPermission)
766+
.eventType(eventType)
767+
.isAnonymous(Authentication.isAnonymousUser(orgMember.getUserId()))
768+
.sessionHash(Hashing.sha512().hashString(tuple.getT3(),StandardCharsets.UTF_8).toString())
769+
.build();
770+
returnMono.deferContextual(contextView -> {
771+
datasourceResourcePermissionEvent.populateDetails(contextView);
772+
applicationEventPublisher.publishEvent(datasourceResourcePermissionEvent);
773+
returnMono.<Void>empty();
774+
});
775+
})
776+
.onErrorResume(throwable -> {
777+
log.error("DatasourceResourcePermissionEvent error.",throwable);
778+
returnMono.empty();
779+
});
780+
}
781+
766782
publicMono<Void>publishLibraryQueryPublishEvent(Stringid,StringoldVersion,StringnewVersion,EventTypeeventType) {
767783
returnsessionUserService.getVisitorOrgMemberCache()
768784
.zipWith(sessionUserService.getVisitorToken())

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp