Skip to content
Snippets Groups Projects
Commit db53e281 authored by pkupczyk's avatar pkupczyk
Browse files

SSDM-5299 : Project Authorization - modify @RolesAllowed annotations at experiment related methods

SVN: 38502
parent 09dfb537
No related branches found
No related tags found
No related merge requests found
Showing with 232 additions and 8 deletions
/*
* Copyright 2017 ETH Zuerich, CISD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ch.systemsx.cisd.openbis.generic.server.authorization.project.provider.project;
import ch.systemsx.cisd.openbis.generic.server.authorization.IAuthorizationDataProvider;
import ch.systemsx.cisd.openbis.generic.server.authorization.project.data.project.IProject;
import ch.systemsx.cisd.openbis.generic.server.authorization.project.data.project.ProjectFromProjectPE;
import ch.systemsx.cisd.openbis.generic.server.authorization.project.provider.object.SingleObjectProvider;
import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
/**
* @author pkupczyk
*/
public class ProjectProviderFromExperimentPermId extends SingleObjectProvider<String>
{
public ProjectProviderFromExperimentPermId(String permId)
{
super(permId);
}
@Override
protected IProject createProject(IAuthorizationDataProvider dataProvider, String permId)
{
ExperimentPE experimentPE = dataProvider.tryGetExperimentByPermId(permId);
if (experimentPE != null)
{
return new ProjectFromProjectPE(experimentPE.getProject());
} else
{
return null;
}
}
}
...@@ -271,7 +271,8 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl ...@@ -271,7 +271,8 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl
session.tryGetPerson(), sample); session.tryGetPerson(), sample);
return SampleTranslator.translate(getSampleTypeSlaveServerPlugin(sample.getSampleType()) return SampleTranslator.translate(getSampleTypeSlaveServerPlugin(sample.getSampleType())
.getSampleInfo(session, sample), session.getBaseIndexURL(), MetaprojectTranslator .getSampleInfo(session, sample), session.getBaseIndexURL(), MetaprojectTranslator
.translate(metaprojectPEs), managedPropertyEvaluatorFactory); .translate(metaprojectPEs),
managedPropertyEvaluatorFactory);
} }
@Override @Override
...@@ -469,7 +470,8 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl ...@@ -469,7 +470,8 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl
@Override @Override
@RolesAllowed(RoleWithHierarchy.PROJECT_OBSERVER) @RolesAllowed(RoleWithHierarchy.PROJECT_OBSERVER)
public ExperimentFeatureVectorSummary getExperimentFeatureVectorSummary(String sessionToken, public ExperimentFeatureVectorSummary getExperimentFeatureVectorSummary(String sessionToken,
@AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) TechId experimentId, AnalysisProcedureCriteria analysisProcedureCriteria) @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) TechId experimentId,
AnalysisProcedureCriteria analysisProcedureCriteria)
{ {
Session session = getSession(sessionToken); Session session = getSession(sessionToken);
// NOTE: we want the settings to be passed form the client in future // NOTE: we want the settings to be passed form the client in future
...@@ -523,8 +525,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl ...@@ -523,8 +525,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl
MaterialSummarySettings settings = new MaterialSummarySettings(); MaterialSummarySettings settings = new MaterialSummarySettings();
settings.setAggregationType(MaterialReplicaSummaryAggregationType.MEDIAN); settings.setAggregationType(MaterialReplicaSummaryAggregationType.MEDIAN);
settings.setFeatureCodes(new ArrayList<String>()); settings.setFeatureCodes(new ArrayList<String>());
settings.setReplicaMatrialTypePatterns(new String[] settings.setReplicaMatrialTypePatterns(new String[] { "GENE", "CONTROL", "COMPOUND" });
{ "GENE", "CONTROL", "COMPOUND" });
settings.setMaterialDetailsPropertyType(ScreeningConstants.GENE_SYMBOLS); settings.setMaterialDetailsPropertyType(ScreeningConstants.GENE_SYMBOLS);
settings.setBiologicalReplicatePropertyTypeCodes("CONCENTRATION", "SIRNA"); settings.setBiologicalReplicatePropertyTypeCodes("CONCENTRATION", "SIRNA");
return settings; return settings;
...@@ -651,7 +652,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl ...@@ -651,7 +652,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl
} }
@Override @Override
@RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @RolesAllowed(RoleWithHierarchy.PROJECT_OBSERVER)
public List<PlateWellReferenceWithDatasets> listPlateWells( public List<PlateWellReferenceWithDatasets> listPlateWells(
String sessionToken, String sessionToken,
@AuthorizationGuard(guardClass = ExperimentIdentifierPredicate.class) ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ExperimentIdentifier experimentIdentifer, @AuthorizationGuard(guardClass = ExperimentIdentifierPredicate.class) ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ExperimentIdentifier experimentIdentifer,
...@@ -704,7 +705,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl ...@@ -704,7 +705,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl
} }
@Override @Override
@RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @RolesAllowed(RoleWithHierarchy.PROJECT_OBSERVER)
public List<Plate> listPlates(String sessionToken, public List<Plate> listPlates(String sessionToken,
@AuthorizationGuard(guardClass = ExperimentIdentifierPredicate.class) ExperimentIdentifier experiment) throws IllegalArgumentException @AuthorizationGuard(guardClass = ExperimentIdentifierPredicate.class) ExperimentIdentifier experiment) throws IllegalArgumentException
{ {
...@@ -821,7 +822,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl ...@@ -821,7 +822,7 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl
} }
@Override @Override
@RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @RolesAllowed(RoleWithHierarchy.PROJECT_OBSERVER)
public ExperimentImageMetadata getExperimentImageMetadata(String sessionToken, public ExperimentImageMetadata getExperimentImageMetadata(String sessionToken,
@AuthorizationGuard(guardClass = ExperimentIdentifierPredicate.class) ExperimentIdentifier experimentIdentifer) @AuthorizationGuard(guardClass = ExperimentIdentifierPredicate.class) ExperimentIdentifier experimentIdentifer)
{ {
......
...@@ -21,9 +21,15 @@ import java.util.List; ...@@ -21,9 +21,15 @@ import java.util.List;
import ch.systemsx.cisd.common.exceptions.Status; import ch.systemsx.cisd.common.exceptions.Status;
import ch.systemsx.cisd.openbis.generic.server.authorization.RoleWithIdentifier; import ch.systemsx.cisd.openbis.generic.server.authorization.RoleWithIdentifier;
import ch.systemsx.cisd.openbis.generic.server.authorization.predicate.AbstractSpacePredicate; import ch.systemsx.cisd.openbis.generic.server.authorization.predicate.AbstractSpacePredicate;
import ch.systemsx.cisd.openbis.generic.server.authorization.project.IProjectAuthorization;
import ch.systemsx.cisd.openbis.generic.server.authorization.project.ProjectAuthorizationBuilder;
import ch.systemsx.cisd.openbis.generic.server.authorization.project.provider.project.ProjectProviderFromExperimentIdentifierString;
import ch.systemsx.cisd.openbis.generic.server.authorization.project.provider.project.ProjectProviderFromExperimentPermId;
import ch.systemsx.cisd.openbis.generic.server.authorization.project.provider.role.RolesProviderFromRolesWithIdentifier;
import ch.systemsx.cisd.openbis.generic.server.authorization.project.provider.user.UserProviderFromPersonPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
import ch.systemsx.cisd.openbis.generic.shared.util.SpaceCodeHelper; import ch.systemsx.cisd.openbis.generic.shared.util.SpaceCodeHelper;
import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ExperimentIdentifier; import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ExperimentIdentifier;
...@@ -49,6 +55,18 @@ public class ExperimentIdentifierPredicate extends AbstractSpacePredicate<Experi ...@@ -49,6 +55,18 @@ public class ExperimentIdentifierPredicate extends AbstractSpacePredicate<Experi
{ {
if (value.getPermId() != null) if (value.getPermId() != null)
{ {
IProjectAuthorization<String> pa = new ProjectAuthorizationBuilder<String>()
.withData(authorizationDataProvider)
.withUser(new UserProviderFromPersonPE(person))
.withRoles(new RolesProviderFromRolesWithIdentifier(allowedRoles))
.withObjects(new ProjectProviderFromExperimentPermId(value.getPermId()))
.build();
if (pa.getObjectsWithoutAccess().isEmpty())
{
return Status.OK;
}
final ExperimentPE experimentOrNull = final ExperimentPE experimentOrNull =
authorizationDataProvider.tryGetExperimentByPermId(value.getPermId()); authorizationDataProvider.tryGetExperimentByPermId(value.getPermId());
if (experimentOrNull == null) if (experimentOrNull == null)
...@@ -60,6 +78,18 @@ public class ExperimentIdentifierPredicate extends AbstractSpacePredicate<Experi ...@@ -60,6 +78,18 @@ public class ExperimentIdentifierPredicate extends AbstractSpacePredicate<Experi
return evaluate(allowedRoles, person, space.getCode()); return evaluate(allowedRoles, person, space.getCode());
} }
IProjectAuthorization<String> pa = new ProjectAuthorizationBuilder<String>()
.withData(authorizationDataProvider)
.withUser(new UserProviderFromPersonPE(person))
.withRoles(new RolesProviderFromRolesWithIdentifier(allowedRoles))
.withObjects(new ProjectProviderFromExperimentIdentifierString(value.getAugmentedCode()))
.build();
if (pa.getObjectsWithoutAccess().isEmpty())
{
return Status.OK;
}
final String spaceCode = SpaceCodeHelper.getSpaceCode(person, value.getSpaceCode()); final String spaceCode = SpaceCodeHelper.getSpaceCode(person, value.getSpaceCode());
return evaluate(allowedRoles, person, spaceCode); return evaluate(allowedRoles, person, spaceCode);
} }
......
/*
* Copyright 2017 ETH Zuerich, CISD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ch.systemsx.cisd.openbis.screening.systemtests.authorization.predicate.experiment;
import java.util.List;
import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSessionProvider;
import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ExperimentIdentifier;
import ch.systemsx.cisd.openbis.screening.systemtests.authorization.predicate.CommonPredicateScreeningSystemTest;
/**
* @author pkupczyk
*/
public class ExperimentIdentifierPredicateWithExperimentIdentifierSystemTest extends CommonPredicateScreeningSystemTest<ExperimentIdentifier>
{
@Override
protected ExperimentIdentifier createNonexistentObject()
{
return new ExperimentIdentifier("IDONTEXIST", "IDONTEXIST", "IDONTEXIST", null);
}
@Override
protected ExperimentIdentifier createObject(SpacePE spacePE, ProjectPE projectPE)
{
ExperimentPE experimentPE = getExperiment(spacePE, projectPE);
return new ExperimentIdentifier(experimentPE.getCode(), projectPE.getCode(), spacePE.getCode(), null);
}
@Override
protected void evaluateObjects(IAuthSessionProvider session, List<ExperimentIdentifier> objects)
{
getBean(ExperimentPredicateScreeningTestService.class).testExperimentIdentifierPredicate(session, objects.get(0));
}
@Override
protected void assertWithNull(PersonPE person, Throwable t)
{
assertException(t, UserFailureException.class, "No experiment specified.");
}
@Override
protected void assertWithNonexistentObject(PersonPE person, Throwable t)
{
assertAuthorizationFailureExceptionThatNotEnoughPrivileges(t);
}
}
/*
* Copyright 2017 ETH Zuerich, CISD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ch.systemsx.cisd.openbis.screening.systemtests.authorization.predicate.experiment;
import java.util.List;
import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSessionProvider;
import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ExperimentIdentifier;
import ch.systemsx.cisd.openbis.screening.systemtests.authorization.predicate.CommonPredicateScreeningSystemTest;
/**
* @author pkupczyk
*/
public class ExperimentIdentifierPredicateWithExperimentPermIdSystemTest extends CommonPredicateScreeningSystemTest<ExperimentIdentifier>
{
@Override
protected ExperimentIdentifier createNonexistentObject()
{
return new ExperimentIdentifier(null, null, null, "IDONTEXIST");
}
@Override
protected ExperimentIdentifier createObject(SpacePE spacePE, ProjectPE projectPE)
{
ExperimentPE experimentPE = getExperiment(spacePE, projectPE);
return new ExperimentIdentifier(null, null, null, experimentPE.getPermId());
}
@Override
protected void evaluateObjects(IAuthSessionProvider session, List<ExperimentIdentifier> objects)
{
getBean(ExperimentPredicateScreeningTestService.class).testExperimentIdentifierPredicate(session, objects.get(0));
}
@Override
protected void assertWithNull(PersonPE person, Throwable t)
{
assertException(t, UserFailureException.class, "No experiment specified.");
}
@Override
protected void assertWithNonexistentObject(PersonPE person, Throwable t)
{
assertAuthorizationFailureExceptionThatNotEnoughPrivileges(t);
}
}
...@@ -23,7 +23,9 @@ import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.Authoriz ...@@ -23,7 +23,9 @@ import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.Authoriz
import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAllowed; import ch.systemsx.cisd.openbis.generic.server.authorization.annotation.RolesAllowed;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSessionProvider; import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSessionProvider;
import ch.systemsx.cisd.openbis.plugin.screening.server.authorization.ExperimentIdentifierPredicate;
import ch.systemsx.cisd.openbis.plugin.screening.server.authorization.ExperimentSearchCriteriaPredicate; import ch.systemsx.cisd.openbis.plugin.screening.server.authorization.ExperimentSearchCriteriaPredicate;
import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.ExperimentIdentifier;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria;
/** /**
...@@ -40,4 +42,11 @@ public class ExperimentPredicateScreeningTestService ...@@ -40,4 +42,11 @@ public class ExperimentPredicateScreeningTestService
{ {
} }
@Transactional
@RolesAllowed(value = { RoleWithHierarchy.PROJECT_OBSERVER })
public void testExperimentIdentifierPredicate(IAuthSessionProvider session,
@AuthorizationGuard(guardClass = ExperimentIdentifierPredicate.class) ExperimentIdentifier experimentIdentifier)
{
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment