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 05c8b8416e915fdfab56ff3c5d8df9de746b4268..9342dc4ff9f0508354883fd49e530bdc618119bb 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 034d376539db00c50481744c5429c44128aa6279..0bc7633ffa53ab534a4188e4fc0adcff95c8d00d 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() {