diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java index 17eb9db5a7..ad98de0f95 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java @@ -132,6 +132,7 @@ public Mono removeAllBiRelations(BiRelationBizType bizType, String sour Query query = new Query(); query.addCriteria(where(BIZ_TYPE).is(bizType)); query.addCriteria(where(SOURCE_ID).is(sourceId)); + query.addCriteria(where(RELATION).is("super_admin").not()); return mongoUpsertHelper.remove(query, BiRelation.class); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiService.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiService.java index c267e3ca9a..fdb40cc04e 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiService.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiService.java @@ -34,7 +34,7 @@ public interface ApplicationApiService { Mono updateUserApplicationLastViewTime(String applicationId); - Mono update(String applicationId, Application application); + Mono update(String applicationId, Application application, Boolean updateStatus); Mono publish(String applicationId, ApplicationPublishRequest applicationPublishRequest); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java index 1345d2d2b7..3ed05375f3 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java @@ -346,23 +346,24 @@ public Mono updateUserApplicationLastViewTime(String applicationId) { } @Override - public Mono update(String applicationId, Application application) { - return checkApplicationStatus(applicationId, NORMAL) + public Mono update(String applicationId, Application application, Boolean updateStatus) { + return Boolean.TRUE.equals(updateStatus) ? Mono.empty() : checkApplicationStatus(applicationId, NORMAL) .then(sessionUserService.getVisitorId()) .flatMap(userId -> resourcePermissionService.checkAndReturnMaxPermission(userId, applicationId, EDIT_APPLICATIONS)) .delayUntil(__ -> checkDatasourcePermissions(application)) - .flatMap(permission -> doUpdateApplication(applicationId, application) + .flatMap(permission -> doUpdateApplication(applicationId, application, updateStatus) .flatMap(applicationUpdated -> buildView(applicationUpdated, permission.getResourceRole().getValue()).map(appInfoView -> ApplicationView.builder() .applicationInfoView(appInfoView) .applicationDSL(applicationUpdated.getEditingApplicationDSL()) .build()))); } - private Mono doUpdateApplication(String applicationId, Application application) { + private Mono doUpdateApplication(String applicationId, Application application, Boolean updateStatus) { Application applicationUpdate = Application.builder() .editingApplicationDSL(application.getEditingApplicationDSLOrNull()) .name(application.getName()) + .applicationStatus(Boolean.TRUE.equals(updateStatus) ? application.getApplicationStatus() : null) .build(); return applicationService.updateById(applicationId, applicationUpdate) .then(applicationService.findById(applicationId)); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java index 2ae5ea03ef..d1c6402f00 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java @@ -123,7 +123,7 @@ public Mono> update(@PathVariable String applicati @RequestBody Application newApplication, @RequestParam(required = false) Boolean updateStatus) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> - applicationApiService.update(appId, newApplication) + applicationApiService.update(appId, newApplication, updateStatus) .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_UPDATE)) .map(ResponseView::success)); } diff --git a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceIntegrationTest.java b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceIntegrationTest.java index e35bc8258e..3ff202b6d5 100644 --- a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceIntegrationTest.java +++ b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceIntegrationTest.java @@ -116,7 +116,7 @@ public void testUpdateApplicationFailedDueToLackOfDatasourcePermissions() { .editingApplicationDSL(applicationView.getApplicationDSL()) .name("app03") .build(); - return applicationApiService.update(applicationView.getApplicationInfoView().getApplicationId(), application); + return applicationApiService.update(applicationView.getApplicationInfoView().getApplicationId(), application, false); }); StepVerifier.create(applicationViewMono) diff --git a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java index 1b7ad7a553..1069447772 100644 --- a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java +++ b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java @@ -169,7 +169,7 @@ public void testPublishApplication() { // update applicationIdMono = applicationIdMono - .delayUntil(id -> applicationApiService.update(id, Application.builder().editingApplicationDSL(Map.of("comp", "table")).build())).cache(); + .delayUntil(id -> applicationApiService.update(id, Application.builder().editingApplicationDSL(Map.of("comp", "table")).build(), false)).cache(); // edit dsl after publish StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getEditingApplication(id, false)))