Skip to content
Snippets Groups Projects
Commit 6ae48d82 authored by jakubs's avatar jakubs
Browse files

BIS-213 SP-301 restore some functionality of SPACE_USER

SVN: 26899
parent 02b9a03b
No related branches found
No related tags found
No related merge requests found
...@@ -63,13 +63,22 @@ public interface IRelationshipService ...@@ -63,13 +63,22 @@ public interface IRelationshipService
@Transactional(propagation = Propagation.MANDATORY) @Transactional(propagation = Propagation.MANDATORY)
@RolesAllowed(value = @RolesAllowed(value =
{ RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER,
RoleWithHierarchy.SPACE_USER })
@Capability("ASSIGN_SAMPLE_TO_EXPERIMENT") @Capability("ASSIGN_SAMPLE_TO_EXPERIMENT")
public void assignSampleToExperiment(IAuthSession session, public void assignSampleToExperiment(IAuthSession session,
@AuthorizationGuard(guardClass = SamplePEPredicate.class) @AuthorizationGuard(guardClass = SamplePEPredicate.class)
SamplePE sample, @AuthorizationGuard(guardClass = ExperimentPEPredicate.class) SamplePE sample, @AuthorizationGuard(guardClass = ExperimentPEPredicate.class)
ExperimentPE experiment); ExperimentPE experiment);
@Transactional(propagation = Propagation.MANDATORY)
@RolesAllowed(value =
{ RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER })
@Capability("UNASSIGN_SAMPLE_FROM_EXPERIMENT")
public void checkCanUnassignSampleFromExperiment(IAuthSession session,
@AuthorizationGuard(guardClass = SamplePEPredicate.class)
SamplePE sample);
@Transactional(propagation = Propagation.MANDATORY) @Transactional(propagation = Propagation.MANDATORY)
@RolesAllowed(value = @RolesAllowed(value =
{ RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER })
...@@ -124,7 +133,8 @@ public interface IRelationshipService ...@@ -124,7 +133,8 @@ public interface IRelationshipService
@Transactional(propagation = Propagation.MANDATORY) @Transactional(propagation = Propagation.MANDATORY)
@RolesAllowed(value = @RolesAllowed(value =
{ RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER }) { RoleWithHierarchy.SPACE_ETL_SERVER, RoleWithHierarchy.SPACE_POWER_USER,
RoleWithHierarchy.SPACE_USER })
@Capability("ADD_PARENT_TO_SAMPLE") @Capability("ADD_PARENT_TO_SAMPLE")
public void addParentToSample(IAuthSession session, public void addParentToSample(IAuthSession session,
@AuthorizationGuard(guardClass = SamplePEPredicate.class) @AuthorizationGuard(guardClass = SamplePEPredicate.class)
......
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
package ch.systemsx.cisd.openbis.generic.server.business; package ch.systemsx.cisd.openbis.generic.server.business;
import javax.annotation.Resource;
import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils; import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.DAOFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.DAOFactory;
...@@ -46,6 +48,13 @@ public class RelationshipService implements IRelationshipService ...@@ -46,6 +48,13 @@ public class RelationshipService implements IRelationshipService
private DAOFactory daoFactory; private DAOFactory daoFactory;
/**
* Reference to this instance of service, but as a spring bean, so that we can call methods of
* this service and run the additional authorization.
*/
@Resource(name = "relationship-service")
private IRelationshipService service;
@Override @Override
public void assignExperimentToProject(IAuthSession session, ExperimentPE experiment, public void assignExperimentToProject(IAuthSession session, ExperimentPE experiment,
ProjectPE project) ProjectPE project)
...@@ -68,6 +77,11 @@ public class RelationshipService implements IRelationshipService ...@@ -68,6 +77,11 @@ public class RelationshipService implements IRelationshipService
public void assignSampleToExperiment(IAuthSession session, SamplePE sample, public void assignSampleToExperiment(IAuthSession session, SamplePE sample,
ExperimentPE experiment) ExperimentPE experiment)
{ {
if (sample.getExperiment() != null)
{
service.checkCanUnassignSampleFromExperiment(session, sample);
}
sample.setExperiment(experiment); sample.setExperiment(experiment);
for (DataPE dataset : sample.getDatasets()) for (DataPE dataset : sample.getDatasets())
...@@ -76,6 +90,12 @@ public class RelationshipService implements IRelationshipService ...@@ -76,6 +90,12 @@ public class RelationshipService implements IRelationshipService
} }
} }
@Override
public void checkCanUnassignSampleFromExperiment(IAuthSession session, SamplePE sample)
{
// all the logic is done by the authorization mechanism
}
@Override @Override
public void unassignSampleFromExperiment(IAuthSession session, SamplePE sample) public void unassignSampleFromExperiment(IAuthSession session, SamplePE sample)
{ {
......
...@@ -632,15 +632,28 @@ public class RelationshipServiceAuthorizationTest extends BaseTest ...@@ -632,15 +632,28 @@ public class RelationshipServiceAuthorizationTest extends BaseTest
GuardedDomain destination = new SpaceDomain(instance); GuardedDomain destination = new SpaceDomain(instance);
AuthorizationRule spaceAdminOrSpaceEtlServer = and( private static AuthorizationRule spaceAdminOrSpaceEtlServer(GuardedDomain domain)
or(rule(source, RoleWithHierarchy.SPACE_POWER_USER), {
rule(source, RoleWithHierarchy.SPACE_ETL_SERVER)), return or(rule(domain, RoleWithHierarchy.SPACE_POWER_USER),
or(rule(destination, RoleWithHierarchy.SPACE_POWER_USER), rule(domain, RoleWithHierarchy.SPACE_ETL_SERVER));
rule(destination, RoleWithHierarchy.SPACE_ETL_SERVER))); }
AuthorizationRule spaceAdminOrSpaceEtlServer = and(spaceAdminOrSpaceEtlServer(source),
spaceAdminOrSpaceEtlServer(destination));
AuthorizationRule spaceAdminOrSpaceEtlServerSingle = spaceAdminOrSpaceEtlServer(source);
private static AuthorizationRule spaceUserOrBetter(GuardedDomain domain)
{
return or(rule(domain, RoleWithHierarchy.SPACE_USER),
rule(domain, RoleWithHierarchy.SPACE_POWER_USER),
rule(domain, RoleWithHierarchy.SPACE_ETL_SERVER));
}
AuthorizationRule spaceUserOrBetter = and(spaceUserOrBetter(source),
spaceUserOrBetter(destination));
AuthorizationRule spaceAdminOrSpaceEtlServerSingle = or( AuthorizationRule spaceUserOrBetterSingle = spaceUserOrBetter(source);
rule(source, RoleWithHierarchy.SPACE_POWER_USER),
rule(source, RoleWithHierarchy.SPACE_ETL_SERVER));
AuthorizationRule instanceEtlServer = rule(instance, RoleWithHierarchy.INSTANCE_ETL_SERVER); AuthorizationRule instanceEtlServer = rule(instance, RoleWithHierarchy.INSTANCE_ETL_SERVER);
...@@ -675,15 +688,15 @@ public class RelationshipServiceAuthorizationTest extends BaseTest ...@@ -675,15 +688,15 @@ public class RelationshipServiceAuthorizationTest extends BaseTest
@DataProvider(name = "rolesAllowedToAssignSampleToExperiment") @DataProvider(name = "rolesAllowedToAssignSampleToExperiment")
RoleWithHierarchy[][] rolesAllowedToAssignSampleToExperiment() RoleWithHierarchy[][] rolesAllowedToAssignSampleToExperiment()
{ {
return RolePermutator.getAcceptedPermutations(spaceAdminOrSpaceEtlServer, source, return RolePermutator.getAcceptedPermutations(spaceUserOrBetter, source, destination,
destination, instance); instance);
} }
@DataProvider(name = "rolesNotAllowedToAssignSampleToExperiment") @DataProvider(name = "rolesNotAllowedToAssignSampleToExperiment")
RoleWithHierarchy[][] rolesNotAllowedToAssignSampleToExperiment() RoleWithHierarchy[][] rolesNotAllowedToAssignSampleToExperiment()
{ {
return RolePermutator.getAcceptedPermutations(not(spaceAdminOrSpaceEtlServer), source, return RolePermutator.getAcceptedPermutations(not(spaceUserOrBetter), source, destination,
destination, instance); instance);
} }
@DataProvider(name = "rolesAllowedToUnassignSampleFromExperiment") @DataProvider(name = "rolesAllowedToUnassignSampleFromExperiment")
...@@ -770,15 +783,15 @@ public class RelationshipServiceAuthorizationTest extends BaseTest ...@@ -770,15 +783,15 @@ public class RelationshipServiceAuthorizationTest extends BaseTest
@DataProvider(name = "rolesAllowedToAddParentToSample") @DataProvider(name = "rolesAllowedToAddParentToSample")
RoleWithHierarchy[][] rolesAllowedToAddParentToSample() RoleWithHierarchy[][] rolesAllowedToAddParentToSample()
{ {
return RolePermutator.getAcceptedPermutations(spaceAdminOrSpaceEtlServer, source, return RolePermutator.getAcceptedPermutations(spaceUserOrBetter, source, destination,
destination, instance); instance);
} }
@DataProvider(name = "rolesNotAllowedToAddParentToSample") @DataProvider(name = "rolesNotAllowedToAddParentToSample")
RoleWithHierarchy[][] rolesNotAllowedToAddParentToSample() RoleWithHierarchy[][] rolesNotAllowedToAddParentToSample()
{ {
return RolePermutator.getAcceptedPermutations(not(spaceAdminOrSpaceEtlServer), source, return RolePermutator.getAcceptedPermutations(not(spaceUserOrBetter), source, destination,
destination, instance); instance);
} }
@DataProvider(name = "rolesAllowedRemoveParentFromSample") @DataProvider(name = "rolesAllowedRemoveParentFromSample")
......
...@@ -48,6 +48,11 @@ public class RelationshipServiceStub implements IRelationshipService ...@@ -48,6 +48,11 @@ public class RelationshipServiceStub implements IRelationshipService
{ {
} }
@Override
public void checkCanUnassignSampleFromExperiment(IAuthSession session, SamplePE sample)
{
}
@Override @Override
public void unassignSampleFromExperiment(IAuthSession session, SamplePE sample) public void unassignSampleFromExperiment(IAuthSession session, SamplePE sample)
{ {
......
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