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.datasourcestorages.base.DatasourceStorageService;
import com.appsmith.server.newactions.base.NewActionService; import com.appsmith.server.newactions.base.NewActionService;
import com.appsmith.server.repositories.ActionCollectionRepository; import com.appsmith.server.repositories.ActionCollectionRepository;
import com.appsmith.server.repositories.DatasourceRepository;
import com.appsmith.server.repositories.NewActionRepository; import com.appsmith.server.repositories.NewActionRepository;
import com.appsmith.server.repositories.NewPageRepository; import com.appsmith.server.repositories.NewPageRepository;
import com.appsmith.server.repositories.PermissionGroupRepository; import com.appsmith.server.repositories.PermissionGroupRepository;
@ -36,7 +35,6 @@ public class ImportExportApplicationServiceImpl extends ImportExportApplicationS
DatasourceService datasourceService, DatasourceService datasourceService,
SessionUserService sessionUserService, SessionUserService sessionUserService,
NewActionRepository newActionRepository, NewActionRepository newActionRepository,
DatasourceRepository datasourceRepository,
PluginRepository pluginRepository, PluginRepository pluginRepository,
WorkspaceService workspaceService, WorkspaceService workspaceService,
ApplicationService applicationService, ApplicationService applicationService,
@ -64,7 +62,6 @@ public class ImportExportApplicationServiceImpl extends ImportExportApplicationS
datasourceService, datasourceService,
sessionUserService, sessionUserService,
newActionRepository, newActionRepository,
datasourceRepository,
pluginRepository, pluginRepository,
workspaceService, workspaceService,
applicationService, applicationService,

View File

@ -3,6 +3,8 @@ package com.appsmith.server.solutions.ce;
import com.appsmith.server.acl.AclPermission; import com.appsmith.server.acl.AclPermission;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import static java.lang.Boolean.TRUE;
@Component @Component
public class ActionPermissionCEImpl implements ActionPermissionCE, DomainPermissionCE { public class ActionPermissionCEImpl implements ActionPermissionCE, DomainPermissionCE {
@Override @Override
@ -15,6 +17,11 @@ public class ActionPermissionCEImpl implements ActionPermissionCE, DomainPermiss
return AclPermission.READ_ACTIONS; return AclPermission.READ_ACTIONS;
} }
@Override
public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) {
return isGitSync ? null : TRUE.equals(exportWithConfiguration) ? getReadPermission() : getEditPermission();
}
@Override @Override
public AclPermission getExecutePermission() { public AclPermission getExecutePermission() {
return AclPermission.EXECUTE_ACTIONS; return AclPermission.EXECUTE_ACTIONS;

View File

@ -15,6 +15,11 @@ public class ApplicationPermissionCEImpl implements ApplicationPermissionCE, Dom
return AclPermission.READ_APPLICATIONS; return AclPermission.READ_APPLICATIONS;
} }
@Override
public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) {
return isGitSync ? getEditPermission() : getExportPermission();
}
@Override @Override
public AclPermission getExportPermission() { public AclPermission getExportPermission() {
return AclPermission.EXPORT_APPLICATIONS; return AclPermission.EXPORT_APPLICATIONS;

View File

@ -3,6 +3,8 @@ package com.appsmith.server.solutions.ce;
import com.appsmith.server.acl.AclPermission; import com.appsmith.server.acl.AclPermission;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import static java.lang.Boolean.TRUE;
@Component @Component
public class DatasourcePermissionCEImpl implements DatasourcePermissionCE, DomainPermissionCE { public class DatasourcePermissionCEImpl implements DatasourcePermissionCE, DomainPermissionCE {
@Override @Override
@ -10,6 +12,11 @@ public class DatasourcePermissionCEImpl implements DatasourcePermissionCE, Domai
return AclPermission.READ_DATASOURCES; return AclPermission.READ_DATASOURCES;
} }
@Override
public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) {
return isGitSync ? null : TRUE.equals(exportWithConfiguration) ? getReadPermission() : getEditPermission();
}
@Override @Override
public AclPermission getDeletePermission() { public AclPermission getDeletePermission() {
return AclPermission.MANAGE_DATASOURCES; return AclPermission.MANAGE_DATASOURCES;

View File

@ -16,4 +16,6 @@ public interface DomainPermissionCE {
* @return The permission required to read the domain. * @return The permission required to read the domain.
*/ */
AclPermission getReadPermission(); 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.migrations.JsonSchemaVersions;
import com.appsmith.server.newactions.base.NewActionService; import com.appsmith.server.newactions.base.NewActionService;
import com.appsmith.server.repositories.ActionCollectionRepository; import com.appsmith.server.repositories.ActionCollectionRepository;
import com.appsmith.server.repositories.DatasourceRepository;
import com.appsmith.server.repositories.NewActionRepository; import com.appsmith.server.repositories.NewActionRepository;
import com.appsmith.server.repositories.NewPageRepository; import com.appsmith.server.repositories.NewPageRepository;
import com.appsmith.server.repositories.PermissionGroupRepository; import com.appsmith.server.repositories.PermissionGroupRepository;
@ -126,7 +125,6 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
private final DatasourceService datasourceService; private final DatasourceService datasourceService;
private final SessionUserService sessionUserService; private final SessionUserService sessionUserService;
private final NewActionRepository newActionRepository; private final NewActionRepository newActionRepository;
private final DatasourceRepository datasourceRepository;
private final PluginRepository pluginRepository; private final PluginRepository pluginRepository;
private final WorkspaceService workspaceService; private final WorkspaceService workspaceService;
private final ApplicationService applicationService; private final ApplicationService applicationService;
@ -194,8 +192,7 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
AtomicReference<Boolean> exportWithConfiguration = new AtomicReference<>(false); AtomicReference<Boolean> exportWithConfiguration = new AtomicReference<>(false);
// If Git-sync, then use MANAGE_APPLICATIONS, else use EXPORT_APPLICATION permission to fetch application // If Git-sync, then use MANAGE_APPLICATIONS, else use EXPORT_APPLICATION permission to fetch application
AclPermission permission = AclPermission permission = applicationPermission.getExportPermission(isGitSync, exportWithConfiguration.get());
isGitSync ? applicationPermission.getEditPermission() : applicationPermission.getExportPermission();
Mono<User> currentUserMono = sessionUserService.getCurrentUser().cache(); Mono<User> currentUserMono = sessionUserService.getCurrentUser().cache();
@ -204,7 +201,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
applicationService applicationService
.findById(applicationId, permission) .findById(applicationId, permission)
// Find the application without permissions if it is a template application // 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( .switchIfEmpty(Mono.error(new AppsmithException(
AppsmithError.NO_RESOURCE_FOUND, FieldName.APPLICATION_ID, applicationId))) AppsmithError.NO_RESOURCE_FOUND, FieldName.APPLICATION_ID, applicationId)))
.map(application -> { .map(application -> {
@ -315,11 +313,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
applicationJson.setExportedApplication(application); applicationJson.setExportedApplication(application);
Set<String> dbNamesUsedInActions = new HashSet<>(); Set<String> dbNamesUsedInActions = new HashSet<>();
Optional<AclPermission> optionalPermission = isGitSync Optional<AclPermission> optionalPermission = Optional.ofNullable(
? Optional.empty() pagePermission.getExportPermission(isGitSync, exportWithConfiguration.get()));
: TRUE.equals(exportWithConfiguration.get())
? Optional.of(pagePermission.getReadPermission())
: Optional.of(pagePermission.getEditPermission());
Flux<NewPage> pageFlux = newPageRepository.findByApplicationId(applicationId, optionalPermission); Flux<NewPage> pageFlux = newPageRepository.findByApplicationId(applicationId, optionalPermission);
List<String> unPublishedPages = application.getPages().stream() List<String> unPublishedPages = application.getPages().stream()
@ -385,11 +380,9 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
} }
}); });
Optional<AclPermission> optionalPermission3 = isGitSync Optional<AclPermission> optionalPermission3 =
? Optional.empty() Optional.ofNullable(datasourcePermission.getExportPermission(
: TRUE.equals(exportWithConfiguration.get()) isGitSync, exportWithConfiguration.get()));
? Optional.of(datasourcePermission.getReadPermission())
: Optional.of(datasourcePermission.getEditPermission());
Flux<Datasource> datasourceFlux = datasourceService.getAllByWorkspaceIdWithStorages( Flux<Datasource> datasourceFlux = datasourceService.getAllByWorkspaceIdWithStorages(
workspaceId, optionalPermission3); workspaceId, optionalPermission3);
@ -423,11 +416,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
.collect(Collectors.toList()); .collect(Collectors.toList());
applicationJson.setDatasourceList(storageList); applicationJson.setDatasourceList(storageList);
Optional<AclPermission> optionalPermission1 = isGitSync Optional<AclPermission> optionalPermission1 = Optional.ofNullable(
? Optional.empty() actionPermission.getExportPermission(isGitSync, exportWithConfiguration.get()));
: TRUE.equals(exportWithConfiguration.get())
? Optional.of(actionPermission.getReadPermission())
: Optional.of(actionPermission.getEditPermission());
Flux<ActionCollection> actionCollectionFlux = Flux<ActionCollection> actionCollectionFlux =
actionCollectionRepository.findByListOfPageIds( actionCollectionRepository.findByListOfPageIds(
unPublishedPages, optionalPermission1); unPublishedPages, optionalPermission1);
@ -510,11 +500,8 @@ public class ImportExportApplicationServiceCEImpl implements ImportExportApplica
.getUpdatedResources() .getUpdatedResources()
.put(FieldName.ACTION_COLLECTION_LIST, updatedActionCollectionSet); .put(FieldName.ACTION_COLLECTION_LIST, updatedActionCollectionSet);
Optional<AclPermission> optionalPermission2 = isGitSync Optional<AclPermission> optionalPermission2 = Optional.ofNullable(
? Optional.empty() actionPermission.getExportPermission(isGitSync, exportWithConfiguration.get()));
: TRUE.equals(exportWithConfiguration.get())
? Optional.of(actionPermission.getReadPermission())
: Optional.of(actionPermission.getEditPermission());
Flux<NewAction> actionFlux = Flux<NewAction> actionFlux =
newActionRepository.findByListOfPageIds(unPublishedPages, optionalPermission2); newActionRepository.findByListOfPageIds(unPublishedPages, optionalPermission2);

View File

@ -3,6 +3,8 @@ package com.appsmith.server.solutions.ce;
import com.appsmith.server.acl.AclPermission; import com.appsmith.server.acl.AclPermission;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import static java.lang.Boolean.TRUE;
@Component @Component
public class PagePermissionCEImpl implements PagePermissionCE, DomainPermissionCE { public class PagePermissionCEImpl implements PagePermissionCE, DomainPermissionCE {
@Override @Override
@ -15,6 +17,11 @@ public class PagePermissionCEImpl implements PagePermissionCE, DomainPermissionC
return AclPermission.READ_PAGES; return AclPermission.READ_PAGES;
} }
@Override
public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) {
return isGitSync ? null : TRUE.equals(exportWithConfiguration) ? getReadPermission() : getEditPermission();
}
@Override @Override
public AclPermission getDeletePermission() { public AclPermission getDeletePermission() {
return AclPermission.MANAGE_PAGES; return AclPermission.MANAGE_PAGES;

View File

@ -27,4 +27,9 @@ public class PermissionGroupPermissionCEImpl implements PermissionGroupPermissio
public AclPermission getReadPermission() { public AclPermission getReadPermission() {
return AclPermission.READ_PERMISSION_GROUPS; 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; return AclPermission.READ_WORKSPACES;
} }
@Override
public AclPermission getExportPermission(boolean isGitSync, boolean exportWithConfiguration) {
return null;
}
@Override @Override
public AclPermission getDeletePermission() { public AclPermission getDeletePermission() {
return AclPermission.MANAGE_WORKSPACES; return AclPermission.MANAGE_WORKSPACES;