From 8c7754d3c080e04252d39348f0e8469a2e8bbd82 Mon Sep 17 00:00:00 2001 From: pkupczyk <piotr.kupczyk@id.ethz.ch> Date: Tue, 13 Jun 2023 12:18:10 +0200 Subject: [PATCH] SSDM-13718 : Fix user rights for creation and update : sample creation & update --- .../sample/UpdateSampleProjectExecutor.java | 2 +- .../server/business/IRelationshipService.java | 9 ++++++- .../server/business/RelationshipService.java | 5 ++++ .../business/bo/AbstractBusinessObject.java | 2 +- .../systemtest/asapi/v3/AbstractTest.java | 16 ++++++------- .../systemtest/asapi/v3/CreateSampleTest.java | 10 ++++---- .../systemtest/asapi/v3/UpdateSampleTest.java | 24 +++++++++---------- .../base/RelationshipServiceStub.java | 6 +++++ 8 files changed, 46 insertions(+), 28 deletions(-) diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java index abf213c0bac..1f307682b78 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/UpdateSampleProjectExecutor.java @@ -98,7 +98,7 @@ public class UpdateSampleProjectExecutor extends AbstractUpdateEntityToOneRelati relationshipService.unassignSampleFromProject(context.getSession(), entity); } else { - relationshipService.assignSampleToProject(context.getSession(), entity, related); + relationshipService.reassignSampleToProject(context.getSession(), entity, related); } } diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java index 36dcaf5c7ad..f4cb21cbdee 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java +++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/IRelationshipService.java @@ -54,12 +54,19 @@ public interface IRelationshipService @AuthorizationGuard(guardClass = ProjectPEPredicate.class) ProjectPE project); @Transactional(propagation = Propagation.MANDATORY) - @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.PROJECT_POWER_USER }) + @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.PROJECT_USER }) @Capability("ASSIGN_SAMPLE_TO_PROJECT") public void assignSampleToProject(IAuthSession session, @AuthorizationGuard(guardClass = SamplePEPredicate.class) SamplePE sample, @AuthorizationGuard(guardClass = ProjectPEPredicate.class) ProjectPE project); + @Transactional(propagation = Propagation.MANDATORY) + @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.PROJECT_POWER_USER }) + @Capability("REASSIGN_SAMPLE_TO_PROJECT") + public void reassignSampleToProject(IAuthSession session, + @AuthorizationGuard(guardClass = SamplePEPredicate.class) SamplePE sample, + @AuthorizationGuard(guardClass = ProjectPEPredicate.class) ProjectPE project); + @Transactional(propagation = Propagation.MANDATORY) @RolesAllowed(value = { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) @Capability("ASSIGN_PROJECT_TO_SPACE") diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java index 22b2a62b7c6..84a5effaa9e 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java +++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/RelationshipService.java @@ -97,6 +97,11 @@ public class RelationshipService implements IRelationshipService, ApplicationCon @Override public void assignSampleToProject(IAuthSession session, SamplePE sample, ProjectPE project) + { + reassignSampleToProject(session, sample, project); + } + + @Override public void reassignSampleToProject(final IAuthSession session, final SamplePE sample, final ProjectPE project) { if (SamplePE.projectSamplesEnabled) { diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java index 55bd2616071..78eb2d9ede9 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java +++ b/server-application-server/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractBusinessObject.java @@ -879,7 +879,7 @@ abstract class AbstractBusinessObject implements IDAOFactory { if (project != null) { - relationshipService.assignSampleToProject(session, sample, project); + relationshipService.reassignSampleToProject(session, sample, project); } else { relationshipService.unassignSampleFromProject(session, sample); diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java index bb37145279f..de4705babc4 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java @@ -1906,10 +1906,10 @@ public class AbstractTest extends SystemTestCase final TestWithUserRoleParams params = new TestWithUserRoleParams(); params.adminSessionToken = adminSessionToken; params.userSessionToken = userSessionToken; - params.roleSpace1Id = space1Id; - params.roleSpace2Id = space2Id; - params.roleSpace1Project1Id = space1Project1Id; - params.roleSpace1Project2Id = space1Project2Id; + params.space1Id = space1Id; + params.space2Id = space2Id; + params.space1Project1Id = space1Project1Id; + params.space1Project2Id = space1Project2Id; action.execute(params); } @@ -1920,13 +1920,13 @@ public class AbstractTest extends SystemTestCase public String userSessionToken; - public ISpaceId roleSpace1Id; + public ISpaceId space1Id; - public ISpaceId roleSpace2Id; + public ISpaceId space2Id; - public IProjectId roleSpace1Project1Id; + public IProjectId space1Project1Id; - public IProjectId roleSpace1Project2Id; + public IProjectId space1Project2Id; } protected static interface TestWithUserRole diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java index dc543638e07..d6b80bba7ef 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java @@ -2050,7 +2050,7 @@ public class CreateSampleTest extends AbstractSampleTest final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_SPACE_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); + sampleCreation.setSpaceId(params.space1Id); if (List.of(RoleWithHierarchy.RoleLevel.INSTANCE, RoleWithHierarchy.RoleLevel.SPACE).contains(role.getRoleLevel()) && List.of( RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER, RoleWithHierarchy.RoleCode.USER) @@ -2073,8 +2073,8 @@ public class CreateSampleTest extends AbstractSampleTest final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_PROJECT_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); - sampleCreation.setProjectId(params.roleSpace1Project1Id); + sampleCreation.setSpaceId(params.space1Id); + sampleCreation.setProjectId(params.space1Project1Id); if (List.of(RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER, RoleWithHierarchy.RoleCode.USER) .contains(role.getRoleCode())) @@ -2095,14 +2095,14 @@ public class CreateSampleTest extends AbstractSampleTest final ExperimentCreation experimentCreation = new ExperimentCreation(); experimentCreation.setTypeId(new EntityTypePermId("SIRNA_HCS")); experimentCreation.setCode("TEST_EXPERIMENT_" + UUID.randomUUID()); - experimentCreation.setProjectId(params.roleSpace1Project1Id); + experimentCreation.setProjectId(params.space1Project1Id); experimentCreation.setProperty("DESCRIPTION", "test description"); final ExperimentPermId experimentId = v3api.createExperiments(params.adminSessionToken, List.of(experimentCreation)).get(0); final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_EXPERIMENT_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); + sampleCreation.setSpaceId(params.space1Id); sampleCreation.setExperimentId(experimentId); if (List.of(RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER, RoleWithHierarchy.RoleCode.USER) diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java index 4a859468c58..a85a7eb8edc 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java @@ -2636,12 +2636,12 @@ public class UpdateSampleTest extends AbstractSampleTest final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_SPACE_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); + sampleCreation.setSpaceId(params.space1Id); final SamplePermId sampleId = v3api.createSamples(params.adminSessionToken, List.of(sampleCreation)).get(0); final SampleUpdate sampleUpdate = new SampleUpdate(); sampleUpdate.setSampleId(sampleId); - sampleUpdate.setSpaceId(params.roleSpace2Id); + sampleUpdate.setSpaceId(params.space2Id); if (List.of(RoleWithHierarchy.RoleLevel.INSTANCE, RoleWithHierarchy.RoleLevel.SPACE).contains(role.getRoleLevel()) && List.of( RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER).contains(role.getRoleCode())) @@ -2662,14 +2662,14 @@ public class UpdateSampleTest extends AbstractSampleTest final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_PROJECT_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); - sampleCreation.setProjectId(params.roleSpace1Project1Id); + sampleCreation.setSpaceId(params.space1Id); + sampleCreation.setProjectId(params.space1Project1Id); final SamplePermId sampleId = v3api.createSamples(params.adminSessionToken, List.of(sampleCreation)).get(0); final SampleUpdate sampleUpdate = new SampleUpdate(); sampleUpdate.setSampleId(sampleId); - sampleUpdate.setProjectId(params.roleSpace1Project2Id); + sampleUpdate.setProjectId(params.space1Project2Id); if (List.of(RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER).contains(role.getRoleCode())) { @@ -2689,31 +2689,31 @@ public class UpdateSampleTest extends AbstractSampleTest final ExperimentCreation experimentCreation = new ExperimentCreation(); experimentCreation.setTypeId(new EntityTypePermId("SIRNA_HCS")); experimentCreation.setCode("TEST_EXPERIMENT_" + UUID.randomUUID()); - experimentCreation.setProjectId(params.roleSpace1Project1Id); + experimentCreation.setProjectId(params.space1Project1Id); experimentCreation.setProperty("DESCRIPTION", "test description"); final ExperimentCreation experimentCreation2 = new ExperimentCreation(); experimentCreation2.setTypeId(new EntityTypePermId("SIRNA_HCS")); experimentCreation2.setCode("TEST_EXPERIMENT_" + UUID.randomUUID()); - experimentCreation2.setProjectId(params.roleSpace1Project2Id); + experimentCreation2.setProjectId(params.space1Project2Id); experimentCreation2.setProperty("DESCRIPTION", "test description"); final List<ExperimentPermId> experimentIds = v3api.createExperiments(params.adminSessionToken, List.of(experimentCreation, experimentCreation2)); - ExperimentPermId experimentId = experimentIds.get(0); - ExperimentPermId experimentId2 = experimentIds.get(1); + ExperimentPermId experiment1Id = experimentIds.get(0); + ExperimentPermId experiment2Id = experimentIds.get(1); final SampleCreation sampleCreation = new SampleCreation(); sampleCreation.setCode("TEST_EXPERIMENT_SAMPLE_" + UUID.randomUUID()); sampleCreation.setTypeId(new EntityTypePermId("CELL_PLATE")); - sampleCreation.setSpaceId(params.roleSpace1Id); - sampleCreation.setExperimentId(experimentId); + sampleCreation.setSpaceId(params.space1Id); + sampleCreation.setExperimentId(experiment1Id); final SamplePermId sampleId = v3api.createSamples(params.adminSessionToken, List.of(sampleCreation)).get(0); final SampleUpdate sampleUpdate = new SampleUpdate(); sampleUpdate.setSampleId(sampleId); - sampleUpdate.setExperimentId(experimentId2); + sampleUpdate.setExperimentId(experiment2Id); if (List.of(RoleWithHierarchy.RoleCode.ADMIN, RoleWithHierarchy.RoleCode.POWER_USER).contains(role.getRoleCode())) { diff --git a/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java b/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java index 5404f0ebd5d..75cf5ae068d 100644 --- a/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java +++ b/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/RelationshipServiceStub.java @@ -140,6 +140,12 @@ public class RelationshipServiceStub implements IRelationshipService } + @Override + public void reassignSampleToProject(final IAuthSession session, final SamplePE sample, final ProjectPE project) + { + + } + @Override public void unassignSampleFromProject(IAuthSession session, SamplePE sample) { -- GitLab