package com.constellio.app.modules.rm.migrations; import static com.constellio.data.utils.LangUtils.withoutDuplicates; import com.constellio.app.entities.modules.MetadataSchemasAlterationHelper; import com.constellio.app.entities.modules.MigrationResourcesProvider; import com.constellio.app.entities.modules.MigrationScript; import com.constellio.app.modules.rm.constants.RMPermissionsTo; import com.constellio.app.modules.rm.constants.RMRoles; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.app.services.migrations.CoreRoles; import com.constellio.app.services.migrations.CoreRoles; import com.constellio.model.entities.CorePermissions; import com.constellio.model.entities.security.Role; import com.constellio.model.entities.security.global.UserCredential; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.records.SchemasRecordsServices; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class RMMigrationTo6_5 implements MigrationScript { @Override public String getVersion() { return "6.5"; } @Override public void migrate(String collection, MigrationResourcesProvider provider, AppLayerFactory factory) throws Exception { new SchemaAlterationsFor6_5(collection, provider, factory).migrate(); givenNewPermissionsToRGDandADMRoles(collection,factory.getModelLayerFactory()); addManageTrashRoleToRGDAndAdmin(collection, factory.getModelLayerFactory()); } private void givenNewPermissionsToRGDandADMRoles(String collection, ModelLayerFactory modelLayerFactory) { Role rgdRole = modelLayerFactory.getRolesManager().getRole(collection, RMRoles.RGD); List<String> newRgdPermissions = new ArrayList<>(); newRgdPermissions.add(RMPermissionsTo.SHARE_A_IMPORTED_FOLDER); newRgdPermissions.add(RMPermissionsTo.SHARE_A_IMPORTED_DOCUMENT); newRgdPermissions.add(RMPermissionsTo.MODIFY_IMPORTED_FOLDERS); newRgdPermissions.add(RMPermissionsTo.MODIFY_IMPORTED_DOCUMENTS); modelLayerFactory.getRolesManager().updateRole(rgdRole.withNewPermissions(newRgdPermissions)); Role admRole = modelLayerFactory.getRolesManager().getRole(collection, CoreRoles.ADMINISTRATOR); List<String> newAdmPermissions = new ArrayList<>(); newAdmPermissions.add(RMPermissionsTo.SHARE_A_IMPORTED_FOLDER); newAdmPermissions.add(RMPermissionsTo.SHARE_A_IMPORTED_DOCUMENT); newAdmPermissions.add(RMPermissionsTo.MODIFY_IMPORTED_FOLDERS); newAdmPermissions.add(RMPermissionsTo.MODIFY_IMPORTED_DOCUMENTS); modelLayerFactory.getRolesManager().updateRole(admRole.withNewPermissions(newAdmPermissions)); } public static class SchemaAlterationsFor6_5 extends MetadataSchemasAlterationHelper { protected SchemaAlterationsFor6_5(String collection, MigrationResourcesProvider provider, AppLayerFactory factory) { super(collection, provider, factory); } @Override protected void migrate(MetadataSchemaTypesBuilder typesBuilder) { } } private void addManageTrashRoleToRGDAndAdmin(String collection, ModelLayerFactory modelLayerFactory) { Role rgdRole = modelLayerFactory.getRolesManager().getRole(collection, RMRoles.RGD); Set<String> newRgdPermissions = new HashSet<>(rgdRole.getOperationPermissions()); newRgdPermissions.add(CorePermissions.MANAGE_TRASH); modelLayerFactory.getRolesManager().updateRole( rgdRole.withPermissions(withoutDuplicates(new ArrayList<>(newRgdPermissions)))); Role admRole = modelLayerFactory.getRolesManager().getRole(collection, CoreRoles.ADMINISTRATOR); Set<String> newAdmPermissions = new HashSet<>(admRole.getOperationPermissions()); newAdmPermissions.add(CorePermissions.MANAGE_TRASH); modelLayerFactory.getRolesManager().updateRole( rgdRole.withPermissions(withoutDuplicates(new ArrayList<>(newAdmPermissions)))); } }