chore: Moved export permission checks to respective permission components (#27948)

This commit is contained in:
Nidhi 2023-10-11 16:36:46 +05:30 committed by GitHub
parent addc5e5174
commit 14a0ab7cab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 52 additions and 30 deletions

View File

@ -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,

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -16,4 +16,6 @@ public interface DomainPermissionCE {
* @return The permission required to read the domain.
*/
AclPermission getReadPermission();
AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration);
}

View File

@ -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<Boolean> 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<User> 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<String> dbNamesUsedInActions = new HashSet<>();
Optional<AclPermission> optionalPermission = isGitSync
? Optional.empty()
: TRUE.equals(exportWithConfiguration.get())
? Optional.of(pagePermission.getReadPermission())
: Optional.of(pagePermission.getEditPermission());
Optional<AclPermission> optionalPermission = Optional.ofNullable(
pagePermission.getExportPermission(isGitSync, exportWithConfiguration.get()));
Flux<NewPage> pageFlux = newPageRepository.findByApplicationId(applicationId, optionalPermission);
List<String> unPublishedPages = application.getPages().stream()
@ -385,11 +380,9 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
}
});
Optional<AclPermission> optionalPermission3 = isGitSync
? Optional.empty()
: TRUE.equals(exportWithConfiguration.get())
? Optional.of(datasourcePermission.getReadPermission())
: Optional.of(datasourcePermission.getEditPermission());
Optional<AclPermission> optionalPermission3 =
Optional.ofNullable(datasourcePermission.getExportPermission(
isGitSync, exportWithConfiguration.get()));
Flux<Datasource> datasourceFlux = datasourceService.getAllByWorkspaceIdWithStorages(
workspaceId, optionalPermission3);
@ -423,11 +416,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
.collect(Collectors.toList());
applicationJson.setDatasourceList(storageList);
Optional<AclPermission> optionalPermission1 = isGitSync
? Optional.empty()
: TRUE.equals(exportWithConfiguration.get())
? Optional.of(actionPermission.getReadPermission())
: Optional.of(actionPermission.getEditPermission());
Optional<AclPermission> optionalPermission1 = Optional.ofNullable(
actionPermission.getExportPermission(isGitSync, exportWithConfiguration.get()));
Flux<ActionCollection> actionCollectionFlux =
actionCollectionRepository.findByListOfPageIds(
unPublishedPages, optionalPermission1);
@ -510,11 +500,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
.getUpdatedResources()
.put(FieldName.ACTION_COLLECTION_LIST, updatedActionCollectionSet);
Optional<AclPermission> optionalPermission2 = isGitSync
? Optional.empty()
: TRUE.equals(exportWithConfiguration.get())
? Optional.of(actionPermission.getReadPermission())
: Optional.of(actionPermission.getEditPermission());
Optional<AclPermission> optionalPermission2 = Optional.ofNullable(
actionPermission.getExportPermission(isGitSync, exportWithConfiguration.get()));
Flux<NewAction> 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<Datasource> createUniqueDatasourceIfNotPresent(

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;