diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/DataSetUpdatesCollectionPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/DataSetUpdatesCollectionPredicate.java index 818012ea1d9ac4ccdc4ac5763fabb704c3de20bf..524376b416867098416b71c2745af301631922e5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/DataSetUpdatesCollectionPredicate.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/DataSetUpdatesCollectionPredicate.java @@ -73,6 +73,12 @@ public class DataSetUpdatesCollectionPredicate extends protected Status doEvaluation(PersonPE person, List<RoleWithIdentifier> allowedRoles, List<? extends DataSetUpdatesDTO> value) { + // Skip all further checks if the person has instance-wide write permissions. + if (hasInstanceWritePermissions(person, allowedRoles).isOK()) + { + return Status.OK; + } + List<TechId> techIds = new ArrayList<TechId>(); List<SampleOwnerIdentifier> sampleIdentifiers = new ArrayList<SampleOwnerIdentifier>(); for (DataSetUpdatesDTO dataSetUpdates : value) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/ExperimentUpdatesPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/ExperimentUpdatesPredicate.java index e3b4b535ad782349ae84524e0414b72d0fffddc9..2545969c4859f94b2f7d8b996a56941f54840549 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/ExperimentUpdatesPredicate.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/ExperimentUpdatesPredicate.java @@ -58,11 +58,18 @@ public class ExperimentUpdatesPredicate extends AbstractPredicate<ExperimentUpda } @Override - protected - Status doEvaluation(final PersonPE person, final List<RoleWithIdentifier> allowedRoles, + protected Status doEvaluation(final PersonPE person, + final List<RoleWithIdentifier> allowedRoles, final ExperimentUpdatesDTO updates) { assert experimentTechIdPredicate.initialized : "Predicate has not been initialized"; + + // Skip all further checks if the person has instance-wide write permissions. + if (hasInstanceWritePermissions(person, allowedRoles).isOK()) + { + return Status.OK; + } + Status status; status = experimentTechIdPredicate.doEvaluation(person, allowedRoles, updates diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewExternalDataPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewExternalDataPredicate.java index 28a8f8cc8a8d6a188fbe233d896e5786e2afe2b0..20a4598e7d5a4f476f6b092494fdf5b983e46e7a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewExternalDataPredicate.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewExternalDataPredicate.java @@ -59,6 +59,12 @@ public class NewExternalDataPredicate extends AbstractPredicate<NewExternalData> protected Status doEvaluation(PersonPE person, List<RoleWithIdentifier> allowedRoles, NewExternalData value) { + // Skip all further checks if the person has instance-wide write permissions. + if (hasInstanceWritePermissions(person, allowedRoles).isOK()) + { + return Status.OK; + } + SampleIdentifier sampleIdentifier = value.getSampleIdentifierOrNull(); if (sampleIdentifier != null) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleOwnerIdentifierPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleOwnerIdentifierPredicate.java index 0e029cd058bf183e54539436a8878c2c922077b6..f170ba2085d1a3d3d54140fe35eb7b52ccef3099 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleOwnerIdentifierPredicate.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleOwnerIdentifierPredicate.java @@ -83,6 +83,12 @@ public class SampleOwnerIdentifierPredicate extends AbstractPredicate<SampleOwne public Status performEvaluation(final PersonPE person, final List<RoleWithIdentifier> allowedRoles, final SampleOwnerIdentifier value) { + // Skip all further checks if the person has instance-wide write permissions. + if (hasInstanceWritePermissions(person, allowedRoles).isOK()) + { + return Status.OK; + } + if (value.isDatabaseInstanceLevel()) { return databaseInstanceIdentifierPredicate.doEvaluation(person, allowedRoles, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleUpdatesCollectionPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleUpdatesCollectionPredicate.java index a3dc393e9453d90210523285d87bfe5a3646becc..1c2ead5fe3e22da5fc563ba45205891b1407ed15 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleUpdatesCollectionPredicate.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleUpdatesCollectionPredicate.java @@ -70,6 +70,12 @@ public class SampleUpdatesCollectionPredicate extends AbstractPredicate<List<Sam protected Status doEvaluation(PersonPE person, List<RoleWithIdentifier> allowedRoles, List<SampleUpdatesDTO> value) { + // Skip all further checks if the person has instance-wide write permissions. + if (hasInstanceWritePermissions(person, allowedRoles).isOK()) + { + return Status.OK; + } + List<TechId> techIds = new ArrayList<TechId>(value.size()); List<SampleOwnerIdentifier> sampleIdentifiers = new ArrayList<SampleOwnerIdentifier>(value.size()); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SpaceIdentifierPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SpaceIdentifierPredicate.java index 99e6feafae6dbf13c3f9d7bddce51d53a627f89c..c5a09f407c5ab67baf9a86b3a14b982cecf046e4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SpaceIdentifierPredicate.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SpaceIdentifierPredicate.java @@ -57,6 +57,12 @@ public class SpaceIdentifierPredicate extends AbstractSpacePredicate<SpaceIdenti protected Status doEvaluation(final PersonPE person, final List<RoleWithIdentifier> allowedRoles, final SpaceIdentifier spaceIdentifier) { + // Skip all further checks if the person has instance-wide write permissions. + if (hasInstanceWritePermissions(person, allowedRoles).isOK()) + { + return Status.OK; + } + assert initialized : "Predicate has not been initialized"; final String spaceCode = SpaceCodeHelper.getSpaceCode(person, spaceIdentifier); final DatabaseInstancePE databaseInstance = getDatabaseInstance(spaceIdentifier);