diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ImportExportApplicationServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ImportExportApplicationServiceImpl.java index 2d38e2d32b..afe1b2aff6 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ImportExportApplicationServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ImportExportApplicationServiceImpl.java @@ -4,7 +4,6 @@ import com.appsmith.server.datasources.base.DatasourceService; import com.appsmith.server.datasourcestorages.base.DatasourceStorageService; import com.appsmith.server.newactions.base.NewActionService; import com.appsmith.server.repositories.ActionCollectionRepository; -import com.appsmith.server.repositories.DatasourceRepository; import com.appsmith.server.repositories.NewActionRepository; import com.appsmith.server.repositories.NewPageRepository; import com.appsmith.server.repositories.PermissionGroupRepository; @@ -36,7 +35,6 @@ public class ImportExportApplicationServiceImpl extends ImportExportApplicationS DatasourceService datasourceService, SessionUserService sessionUserService, NewActionRepository newActionRepository, - DatasourceRepository datasourceRepository, PluginRepository pluginRepository, WorkspaceService workspaceService, ApplicationService applicationService, @@ -64,7 +62,6 @@ public class ImportExportApplicationServiceImpl extends ImportExportApplicationS datasourceService, sessionUserService, newActionRepository, - datasourceRepository, pluginRepository, workspaceService, applicationService, diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ActionPermissionCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ActionPermissionCEImpl.java index 1a855eaa5b..aeb1b9900f 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ActionPermissionCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ActionPermissionCEImpl.java @@ -3,6 +3,8 @@ package com.appsmith.server.solutions.ce; import com.appsmith.server.acl.AclPermission; import org.springframework.stereotype.Component; +import static java.lang.Boolean.TRUE; + @Component public class ActionPermissionCEImpl implements ActionPermissionCE, DomainPermissionCE { @Override @@ -15,6 +17,11 @@ public class ActionPermissionCEImpl implements ActionPermissionCE, DomainPermiss return AclPermission.READ_ACTIONS; } + @Override + public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) { + return isGitSync ? null : TRUE.equals(exportWithConfiguration) ? getReadPermission() : getEditPermission(); + } + @Override public AclPermission getExecutePermission() { return AclPermission.EXECUTE_ACTIONS; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ApplicationPermissionCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ApplicationPermissionCEImpl.java index ef277b9f4c..6a9c803fb4 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ApplicationPermissionCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ApplicationPermissionCEImpl.java @@ -15,6 +15,11 @@ public class ApplicationPermissionCEImpl implements ApplicationPermissionCE, Dom return AclPermission.READ_APPLICATIONS; } + @Override + public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) { + return isGitSync ? getEditPermission() : getExportPermission(); + } + @Override public AclPermission getExportPermission() { return AclPermission.EXPORT_APPLICATIONS; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourcePermissionCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourcePermissionCEImpl.java index 29e90297cd..519ca8029a 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourcePermissionCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DatasourcePermissionCEImpl.java @@ -3,6 +3,8 @@ package com.appsmith.server.solutions.ce; import com.appsmith.server.acl.AclPermission; import org.springframework.stereotype.Component; +import static java.lang.Boolean.TRUE; + @Component public class DatasourcePermissionCEImpl implements DatasourcePermissionCE, DomainPermissionCE { @Override @@ -10,6 +12,11 @@ public class DatasourcePermissionCEImpl implements DatasourcePermissionCE, Domai return AclPermission.READ_DATASOURCES; } + @Override + public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) { + return isGitSync ? null : TRUE.equals(exportWithConfiguration) ? getReadPermission() : getEditPermission(); + } + @Override public AclPermission getDeletePermission() { return AclPermission.MANAGE_DATASOURCES; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DomainPermissionCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DomainPermissionCE.java index 083e8fbe2a..71e4d70125 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DomainPermissionCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/DomainPermissionCE.java @@ -16,4 +16,6 @@ public interface DomainPermissionCE { * @return The permission required to read the domain. */ AclPermission getReadPermission(); + + AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ImportExportApplicationServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ImportExportApplicationServiceCEImpl.java index 00d0e816b9..f9c5744fd6 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ImportExportApplicationServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/ImportExportApplicationServiceCEImpl.java @@ -54,7 +54,6 @@ import com.appsmith.server.migrations.JsonSchemaMigration; import com.appsmith.server.migrations.JsonSchemaVersions; import com.appsmith.server.newactions.base.NewActionService; import com.appsmith.server.repositories.ActionCollectionRepository; -import com.appsmith.server.repositories.DatasourceRepository; import com.appsmith.server.repositories.NewActionRepository; import com.appsmith.server.repositories.NewPageRepository; import com.appsmith.server.repositories.PermissionGroupRepository; @@ -126,7 +125,6 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica private final DatasourceService datasourceService; private final SessionUserService sessionUserService; private final NewActionRepository newActionRepository; - private final DatasourceRepository datasourceRepository; private final PluginRepository pluginRepository; private final WorkspaceService workspaceService; private final ApplicationService applicationService; @@ -194,8 +192,7 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica AtomicReference exportWithConfiguration = new AtomicReference<>(false); // If Git-sync, then use MANAGE_APPLICATIONS, else use EXPORT_APPLICATION permission to fetch application - AclPermission permission = - isGitSync ? applicationPermission.getEditPermission() : applicationPermission.getExportPermission(); + AclPermission permission = applicationPermission.getExportPermission(isGitSync, exportWithConfiguration.get()); Mono currentUserMono = sessionUserService.getCurrentUser().cache(); @@ -204,7 +201,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica applicationService .findById(applicationId, permission) // Find the application without permissions if it is a template application - .switchIfEmpty(applicationService.findByIdAndExportWithConfiguration(applicationId, TRUE)) + .switchIfEmpty(Mono.defer( + () -> applicationService.findByIdAndExportWithConfiguration(applicationId, TRUE))) .switchIfEmpty(Mono.error(new AppsmithException( AppsmithError.NO_RESOURCE_FOUND, FieldName.APPLICATION_ID, applicationId))) .map(application -> { @@ -315,11 +313,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica applicationJson.setExportedApplication(application); Set dbNamesUsedInActions = new HashSet<>(); - Optional optionalPermission = isGitSync - ? Optional.empty() - : TRUE.equals(exportWithConfiguration.get()) - ? Optional.of(pagePermission.getReadPermission()) - : Optional.of(pagePermission.getEditPermission()); + Optional optionalPermission = Optional.ofNullable( + pagePermission.getExportPermission(isGitSync, exportWithConfiguration.get())); Flux pageFlux = newPageRepository.findByApplicationId(applicationId, optionalPermission); List unPublishedPages = application.getPages().stream() @@ -385,11 +380,9 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica } }); - Optional optionalPermission3 = isGitSync - ? Optional.empty() - : TRUE.equals(exportWithConfiguration.get()) - ? Optional.of(datasourcePermission.getReadPermission()) - : Optional.of(datasourcePermission.getEditPermission()); + Optional optionalPermission3 = + Optional.ofNullable(datasourcePermission.getExportPermission( + isGitSync, exportWithConfiguration.get())); Flux datasourceFlux = datasourceService.getAllByWorkspaceIdWithStorages( workspaceId, optionalPermission3); @@ -423,11 +416,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica .collect(Collectors.toList()); applicationJson.setDatasourceList(storageList); - Optional optionalPermission1 = isGitSync - ? Optional.empty() - : TRUE.equals(exportWithConfiguration.get()) - ? Optional.of(actionPermission.getReadPermission()) - : Optional.of(actionPermission.getEditPermission()); + Optional optionalPermission1 = Optional.ofNullable( + actionPermission.getExportPermission(isGitSync, exportWithConfiguration.get())); Flux actionCollectionFlux = actionCollectionRepository.findByListOfPageIds( unPublishedPages, optionalPermission1); @@ -510,11 +500,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica .getUpdatedResources() .put(FieldName.ACTION_COLLECTION_LIST, updatedActionCollectionSet); - Optional optionalPermission2 = isGitSync - ? Optional.empty() - : TRUE.equals(exportWithConfiguration.get()) - ? Optional.of(actionPermission.getReadPermission()) - : Optional.of(actionPermission.getEditPermission()); + Optional optionalPermission2 = Optional.ofNullable( + actionPermission.getExportPermission(isGitSync, exportWithConfiguration.get())); Flux actionFlux = newActionRepository.findByListOfPageIds(unPublishedPages, optionalPermission2); @@ -2303,8 +2290,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica * This will check if the datasource is already present in the workspace and create a new one if unable to find one * * @param existingDatasources already present datasource in the workspace - * @param datasourceStorage which will be checked against existing datasources - * @param workspace workspace where duplicate datasource should be checked + * @param datasourceStorage which will be checked against existing datasources + * @param workspace workspace where duplicate datasource should be checked * @return already present or brand new datasource depending upon the equality check */ private Mono createUniqueDatasourceIfNotPresent( diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PagePermissionCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PagePermissionCEImpl.java index 03b270ddc6..51d26f72c7 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PagePermissionCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PagePermissionCEImpl.java @@ -3,6 +3,8 @@ package com.appsmith.server.solutions.ce; import com.appsmith.server.acl.AclPermission; import org.springframework.stereotype.Component; +import static java.lang.Boolean.TRUE; + @Component public class PagePermissionCEImpl implements PagePermissionCE, DomainPermissionCE { @Override @@ -15,6 +17,11 @@ public class PagePermissionCEImpl implements PagePermissionCE, DomainPermissionC return AclPermission.READ_PAGES; } + @Override + public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) { + return isGitSync ? null : TRUE.equals(exportWithConfiguration) ? getReadPermission() : getEditPermission(); + } + @Override public AclPermission getDeletePermission() { return AclPermission.MANAGE_PAGES; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PermissionGroupPermissionCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PermissionGroupPermissionCEImpl.java index c82b6cd20f..27ef368c85 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PermissionGroupPermissionCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PermissionGroupPermissionCEImpl.java @@ -27,4 +27,9 @@ public class PermissionGroupPermissionCEImpl implements PermissionGroupPermissio public AclPermission getReadPermission() { return AclPermission.READ_PERMISSION_GROUPS; } + + @Override + public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) { + return null; + } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/WorkspacePermissionCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/WorkspacePermissionCEImpl.java index abc8b9a240..9c09aa0986 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/WorkspacePermissionCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/WorkspacePermissionCEImpl.java @@ -15,6 +15,11 @@ public class WorkspacePermissionCEImpl implements WorkspacePermissionCE, DomainP return AclPermission.READ_WORKSPACES; } + @Override + public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) { + return null; + } + @Override public AclPermission getDeletePermission() { return AclPermission.MANAGE_WORKSPACES;