From 15ab5d4215b8c0ec662ea60a32e2a02d984ccfda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20Sch=C3=BCttler?= Date: Fri, 19 Jul 2024 11:53:04 +0200 Subject: [PATCH] Resolve RED-9255 --- .../impl/controller/SupportController.java | 2 ++ .../acl/custom/dossier/DossierACLService.java | 3 +- .../service/DossierImportService.java | 2 -- .../service/FileImportPersistenceService.java | 13 ++++++-- .../service/ManualChangesImportService.java | 14 ++++----- .../mapper/ManualChangesExportMapper.java | 30 +++++++++++-------- .../v1/processor/roles/ActionRoles.java | 5 ++-- .../v1/processor/roles/ApplicationRoles.java | 20 +++++++++---- 8 files changed, 55 insertions(+), 34 deletions(-) diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SupportController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SupportController.java index fa348ede1..c7b0fb063 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SupportController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/SupportController.java @@ -1,5 +1,6 @@ package com.iqser.red.persistence.service.v1.external.api.impl.controller; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.IMPORT_FILES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.USE_SUPPORT_CONTROLLER; import java.io.IOException; @@ -134,6 +135,7 @@ public class SupportController implements SupportResource { @Override + @PreAuthorize("hasAuthority('" + IMPORT_FILES + "')") public ImportResponse importFiles(MultipartFile file) { byte[] bytes; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java index b60076a01..2777ef08e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/custom/dossier/DossierACLService.java @@ -8,6 +8,7 @@ import java.util.stream.Collectors; import org.springframework.security.access.prepost.PostFilter; import org.springframework.security.acls.domain.ObjectIdentityImpl; import org.springframework.security.acls.domain.PrincipalSid; +import org.springframework.security.acls.model.MutableAcl; import org.springframework.security.acls.model.MutableAclService; import org.springframework.security.acls.model.NotFoundException; import org.springframework.stereotype.Service; @@ -110,7 +111,7 @@ public class DossierACLService extends AbstractACLService { @Transactional public void updateDossierACL(Set members, Set approvers, String owner, String dossierId) { - var acl = getOrCreateACL(dossierId); + MutableAcl acl = getOrCreateACL(dossierId); // naive clear all ace's first while (!acl.getEntries().isEmpty()) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierImportService.java index 060f9ab8d..f309674e3 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierImportService.java @@ -14,7 +14,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.Dossier import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; -import io.micrometer.observation.ObservationRegistry; import io.micrometer.observation.annotation.Observed; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; @@ -30,7 +29,6 @@ public class DossierImportService { DossierCreatorService dossierCreatorService; FileImportService fileImportService; EntityTypeImportService entityTypeImportService; - ObservationRegistry registry; @Observed(name = "DossierImportService", contextualName = "import-dossier") diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/FileImportPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/FileImportPersistenceService.java index 0495a706b..3f39342a4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/FileImportPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/FileImportPersistenceService.java @@ -24,18 +24,20 @@ import lombok.experimental.FieldDefaults; @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) public class FileImportPersistenceService { - ManualChangesImportService manualChangesImportService; FileRepository fileRepository; @Transactional @Observed(name = "FileImportPersistenceService", contextualName = "import-file-to-db") - public synchronized String saveFileToDb(String userId, FileExchangeImportModel.FileImport file, String dossierId, TemplateImportInfo templateImportInfo) { // synchronized as this is being called in an async block. Might lock up DB otherwise. + public synchronized String saveFileToDb(String userId, + FileExchangeImportModel.FileImport file, + String dossierId, + TemplateImportInfo templateImportInfo) { // synchronized as this is being called in an async block. Might lock up DB otherwise. String fileId = createFile(dossierId, userId, file, templateImportInfo.getIdMapping()); - manualChangesImportService.importManualChanges(file.getManualChanges(), fileId); + manualChangesImportService.importManualChanges(file.getManualChanges(), fileId, userId); return fileId; } @@ -49,6 +51,11 @@ public class FileImportPersistenceService { FileEntity fileEntity = MagicConverter.convert(fileModel, FileEntity.class, new FileEntityMapper(fileAttributeConfigMap)); + fileEntity.setAssignee(userid); + fileEntity.setLastReviewer(userid); + fileEntity.setLastApprover(userid); + fileEntity.setUploader(userid); + fileEntity.setDossierId(dossierId); fileRepository.save(fileEntity); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/ManualChangesImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/ManualChangesImportService.java index f14fc3884..5250e7e2c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/ManualChangesImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/ManualChangesImportService.java @@ -38,38 +38,38 @@ public class ManualChangesImportService { @Transactional @Observed(name = "ManualChangesImportService", contextualName = "import-manual-changes") - public void importManualChanges(ManualChangesExportModel exportModel, String fileId) { + public void importManualChanges(ManualChangesExportModel exportModel, String fileId, String userId) { FileEntity fileEntity = fileRepository.findById(fileId) .orElseThrow(); exportModel.getManualAddExportModels() .stream() - .map(model -> mapper.toEntity(model, fileEntity)) + .map(model -> mapper.toEntity(model, fileEntity, userId)) .forEach(manualRedactionRepository::saveAndFlush); exportModel.getManualForceExportModels() .stream() - .map(model -> mapper.toEntity(model, fileEntity)) + .map(model -> mapper.toEntity(model, fileEntity, userId)) .forEach(forceRedactionRepository::saveAndFlush); exportModel.getManualRecategorizationExportModels() .stream() - .map(model -> mapper.toEntity(model, fileEntity)) + .map(model -> mapper.toEntity(model, fileEntity, userId)) .forEach(recategorizationRepository::saveAndFlush); exportModel.getManualRemoveExportModels() .stream() - .map(model -> mapper.toEntity(model, fileEntity)) + .map(model -> mapper.toEntity(model, fileEntity, userId)) .forEach(removeRedactionRepository::saveAndFlush); exportModel.getManualResizeExportModels() .stream() - .map(model -> mapper.toEntity(model, fileEntity)) + .map(model -> mapper.toEntity(model, fileEntity, userId)) .forEach(resizeRedactionRepository::saveAndFlush); exportModel.getManualLegalBasisChangeExportModels() .stream() - .map(model -> mapper.toEntity(model, fileEntity)) + .map(model -> mapper.toEntity(model, fileEntity, userId)) .forEach(legalBasisChangeRepository::saveAndFlush); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/mapper/ManualChangesExportMapper.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/mapper/ManualChangesExportMapper.java index 57972429f..5e5f4b6b6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/mapper/ManualChangesExportMapper.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/mapper/ManualChangesExportMapper.java @@ -53,79 +53,85 @@ public interface ManualChangesExportMapper { ManualResizeExportModel toModel(ManualResizeRedactionEntity entity); - ManualLegalBasisChangeEntity toEntity(ManualLegalBasisChangeExportModel model, @Context FileEntity file); + ManualLegalBasisChangeEntity toEntity(ManualLegalBasisChangeExportModel model, @Context FileEntity file, @Context String userId); - ManualForceRedactionEntity toEntity(ManualForceExportModel model, @Context FileEntity file); + ManualForceRedactionEntity toEntity(ManualForceExportModel model, @Context FileEntity file, @Context String userId); - ManualRedactionEntryEntity toEntity(ManualAddExportModel model, @Context FileEntity file); + ManualRedactionEntryEntity toEntity(ManualAddExportModel model, @Context FileEntity file, @Context String userId); - IdRemovalEntity toEntity(ManualRemoveExportModel model, @Context FileEntity file); + IdRemovalEntity toEntity(ManualRemoveExportModel model, @Context FileEntity file, @Context String userId); - ManualRecategorizationEntity toEntity(ManualRecategorizationExportModel model, @Context FileEntity file); + ManualRecategorizationEntity toEntity(ManualRecategorizationExportModel model, @Context FileEntity file, @Context String userId); - ManualResizeRedactionEntity toEntity(ManualResizeExportModel model, @Context FileEntity file); + ManualResizeRedactionEntity toEntity(ManualResizeExportModel model, @Context FileEntity file, @Context String userId); @AfterMapping default void setFileStatusAndId(ManualLegalBasisChangeExportModel model, @MappingTarget ManualLegalBasisChangeEntity.ManualLegalBasisChangeEntityBuilder entity, - @Context FileEntity file) { + @Context FileEntity file, @Context String userId) { AnnotationEntityId annotationEntityId = new AnnotationEntityId(model.getAnnotationId(), file.getId()); entity.id(annotationEntityId); entity.fileStatus(file); + entity.user(userId); } @AfterMapping default void setFileStatusAndId(ManualRecategorizationExportModel model, @MappingTarget ManualRecategorizationEntity.ManualRecategorizationEntityBuilder entity, - @Context FileEntity file) { + @Context FileEntity file, @Context String userId) { AnnotationEntityId annotationEntityId = new AnnotationEntityId(model.getAnnotationId(), file.getId()); entity.id(annotationEntityId); entity.fileStatus(file); + entity.user(userId); } @AfterMapping - default void setFileStatusAndId(ManualAddExportModel model, @MappingTarget ManualRedactionEntryEntity.ManualRedactionEntryEntityBuilder entity, @Context FileEntity file) { + default void setFileStatusAndId(ManualAddExportModel model, @MappingTarget ManualRedactionEntryEntity.ManualRedactionEntryEntityBuilder entity, @Context FileEntity file, @Context String userId) { AnnotationEntityId annotationEntityId = new AnnotationEntityId(model.getAnnotationId(), file.getId()); entity.id(annotationEntityId); entity.fileStatus(file); + entity.user(userId); } @AfterMapping - default void setFileStatusAndId(ManualResizeExportModel model, @MappingTarget ManualResizeRedactionEntity.ManualResizeRedactionEntityBuilder entity, @Context FileEntity file) { + default void setFileStatusAndId(ManualResizeExportModel model, @MappingTarget ManualResizeRedactionEntity.ManualResizeRedactionEntityBuilder entity, @Context FileEntity file, @Context String userId) { AnnotationEntityId annotationEntityId = new AnnotationEntityId(model.getAnnotationId(), file.getId()); entity.id(annotationEntityId); entity.fileStatus(file); + entity.user(userId); } @AfterMapping - default void setFileStatusAndId(ManualForceExportModel model, @MappingTarget ManualForceRedactionEntity.ManualForceRedactionEntityBuilder entity, @Context FileEntity file) { + default void setFileStatusAndId(ManualForceExportModel model, @MappingTarget ManualForceRedactionEntity.ManualForceRedactionEntityBuilder entity, @Context FileEntity file, @Context String userId) { AnnotationEntityId annotationEntityId = new AnnotationEntityId(model.getAnnotationId(), file.getId()); entity.id(annotationEntityId); entity.fileStatus(file); + entity.user(userId); } @AfterMapping - default void setFileStatusAndId(ManualRemoveExportModel model, @MappingTarget IdRemovalEntity.IdRemovalEntityBuilder entity, @Context FileEntity file) { + default void setFileStatusAndId(ManualRemoveExportModel model, @MappingTarget IdRemovalEntity.IdRemovalEntityBuilder entity, @Context FileEntity file, @Context String userId) { AnnotationEntityId annotationEntityId = new AnnotationEntityId(model.getAnnotationId(), file.getId()); entity.id(annotationEntityId); entity.fileStatus(file); + entity.user(userId); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java index cb81b38d3..02f30c55d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ActionRoles.java @@ -61,7 +61,7 @@ public final class ActionRoles { // IMAGE SIMILIARITY SEARCH - public static final String GET_SIMILAR_IMAGES ="red-get-similiar-images"; + public static final String GET_SIMILAR_IMAGES = "red-get-similiar-images"; // Preferences public static final String MANAGE_USER_PREFERENCES = "red-manage-user-preferences"; @@ -178,8 +178,7 @@ public final class ActionRoles { public static final String DEPLOYMENT_INFO = "red-deployment-info"; public static final String USE_SUPPORT_CONTROLLER = "red-use-support-controller"; - - + public static final String IMPORT_FILES = "red-import-files"; private ActionRoles() {} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java index 8c966f94f..b97aa37aa 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/roles/ApplicationRoles.java @@ -33,6 +33,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.roles.Ac import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_REPORT_TEMPLATES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_RSS; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.GET_TENANTS; +import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.IMPORT_FILES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.MANAGE_ACL_PERMISSIONS; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.MANAGE_USER_PREFERENCES; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.MANAGE_VIEWED_PAGES; @@ -116,12 +117,19 @@ public final class ApplicationRoles { public static final Set UNMAPPED_ACTION_ROLES = Sets.newHashSet(UNARCHIVE_DOSSIER, UPDATE_LICENSE, GET_RSS, USE_SUPPORT_CONTROLLER); - public static final Set KNECON_ADMIN_ACTION_ROLES = Sets.newHashSet(READ_LICENSE, UPDATE_LICENSE, GET_TENANTS, CREATE_TENANT, READ_USERS, READ_ALL_USERS, WRITE_USERS, - READ_SMTP_CONFIGURATION, - WRITE_SMTP_CONFIGURATION, - UNARCHIVE_DOSSIER, - USE_SUPPORT_CONTROLLER); - public static final Set KNECON_SUPPORT_ACTION_ROLES = Sets.newHashSet(KNECON_ADMIN_ACTION_ROLES); + public static final Set KNECON_SUPPORT_ACTION_ROLES = Sets.newHashSet(READ_LICENSE, + UPDATE_LICENSE, + GET_TENANTS, + CREATE_TENANT, + READ_USERS, + READ_ALL_USERS, + WRITE_USERS, + READ_SMTP_CONFIGURATION, + WRITE_SMTP_CONFIGURATION, + UNARCHIVE_DOSSIER, + USE_SUPPORT_CONTROLLER); + + public static final Set KNECON_ADMIN_ACTION_ROLES = Sets.union(KNECON_SUPPORT_ACTION_ROLES, Sets.newHashSet(IMPORT_FILES)); public static final Set RED_USER_ACTION_ROLES = Sets.newHashSet(ADD_COMMENT, READ_LICENSE,