From a7877282cb76917de971ad6e91f0d9f68da06db8 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Mon, 24 Apr 2017 11:50:04 +0000 Subject: [PATCH] SSDM-4771: Creation of link data sets and container data sets are allowed for SPACE_USERs. Systemtests written. SVN: 38084 --- .../dataset/DataSetAuthorizationExecutor.java | 6 +++ .../asapi/v3/CreateDataSetTest.java | 40 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java index 05c8b8416e9..9342dc4ff9f 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java @@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKin import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy; import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.LinkDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; /** @@ -61,6 +62,11 @@ public class DataSetAuthorizationExecutor implements IDataSetAuthorizationExecut @DatabaseCreateOrDeleteModification(value = ObjectKind.DATA_SET) public void canCreate(IOperationContext context, @AuthorizationGuard(guardClass = DataPEPredicate.class) DataPE dataSet) { + if (dataSet instanceof ExternalDataPE == false) + { + return; + } + boolean isCreatorPersonAllowed = false; boolean isPersonAllowed = false; diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java index 034d376539d..0bc7633ffa5 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java @@ -78,6 +78,46 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewETPTAssignment; */ public class CreateDataSetTest extends AbstractDataSetTest { + @Test + public void testCreateLinkDataSetWithSpaceUser() + { + String sessionToken = v3api.login(TEST_SPACE_USER, PASSWORD); + String code = UUID.randomUUID().toString(); + LinkedDataCreation linkedData = new LinkedDataCreation(); + linkedData.setExternalDmsId(new ExternalDmsPermId("DMS_1")); + linkedData.setExternalCode("test-"+System.currentTimeMillis()); + DataSetCreation creation = new DataSetCreation(); + creation.setCode(code); + creation.setTypeId(new EntityTypePermId("LINK_TYPE")); + creation.setExperimentId(new ExperimentIdentifier("/TEST-SPACE/NOE/EXP-TEST-2")); + creation.setDataStoreId(new DataStorePermId("STANDARD")); + creation.setLinkedData(linkedData); + creation.setCreationId(new CreationId(code)); + + List<DataSetPermId> dataSets = v3api.createDataSets(sessionToken, Collections.singletonList(creation)); + + assertEquals(dataSets.get(0).getPermId(), code.toUpperCase()); + assertEquals(dataSets.size(), 1); + } + + @Test + public void testCreateContainerDataSetWithSpaceUser() + { + String sessionToken = v3api.login(TEST_SPACE_USER, PASSWORD); + String code = UUID.randomUUID().toString(); + DataSetCreation creation = new DataSetCreation(); + creation.setCode(code); + creation.setTypeId(new EntityTypePermId("CONTAINER_TYPE")); + creation.setExperimentId(new ExperimentIdentifier("/TEST-SPACE/NOE/EXP-TEST-2")); + creation.setDataStoreId(new DataStorePermId("STANDARD")); + creation.setCreationId(new CreationId(code)); + + List<DataSetPermId> dataSets = v3api.createDataSets(sessionToken, Collections.singletonList(creation)); + + assertEquals(dataSets.get(0).getPermId(), code.toUpperCase()); + assertEquals(dataSets.size(), 1); + } + @Test public void testCreateDSWithAdminUserInBehalfOfASpaceObserver() { -- GitLab