mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-17 06:53:09 +00:00
prevent the generation of resource policy entry values in the database with null value for the dspace_object column
This commit is contained in:
@@ -727,18 +727,14 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
|
|||||||
// if come from InstallItem: remove all submission/workflow policies
|
// if come from InstallItem: remove all submission/workflow policies
|
||||||
authorizeService.removeAllPoliciesByDSOAndType(context, mybundle, ResourcePolicy.TYPE_SUBMISSION);
|
authorizeService.removeAllPoliciesByDSOAndType(context, mybundle, ResourcePolicy.TYPE_SUBMISSION);
|
||||||
authorizeService.removeAllPoliciesByDSOAndType(context, mybundle, ResourcePolicy.TYPE_WORKFLOW);
|
authorizeService.removeAllPoliciesByDSOAndType(context, mybundle, ResourcePolicy.TYPE_WORKFLOW);
|
||||||
|
addDefaultPoliciesNotInPlace(context, mybundle, defaultCollectionPolicies);
|
||||||
List<ResourcePolicy> policiesBundleToAdd = filterPoliciesToAdd(context, defaultCollectionPolicies, mybundle);
|
|
||||||
authorizeService.addPolicies(context, policiesBundleToAdd, mybundle);
|
|
||||||
|
|
||||||
for(Bitstream bitstream : mybundle.getBitstreams())
|
for(Bitstream bitstream : mybundle.getBitstreams())
|
||||||
{
|
{
|
||||||
// if come from InstallItem: remove all submission/workflow policies
|
// if come from InstallItem: remove all submission/workflow policies
|
||||||
authorizeService.removeAllPoliciesByDSOAndType(context, bitstream, ResourcePolicy.TYPE_SUBMISSION);
|
authorizeService.removeAllPoliciesByDSOAndType(context, bitstream, ResourcePolicy.TYPE_SUBMISSION);
|
||||||
authorizeService.removeAllPoliciesByDSOAndType(context, bitstream, ResourcePolicy.TYPE_WORKFLOW);
|
authorizeService.removeAllPoliciesByDSOAndType(context, bitstream, ResourcePolicy.TYPE_WORKFLOW);
|
||||||
|
addDefaultPoliciesNotInPlace(context, bitstream, defaultCollectionPolicies);
|
||||||
List<ResourcePolicy> policiesBitstreamToAdd = filterPoliciesToAdd(context, defaultCollectionPolicies, bitstream);
|
|
||||||
authorizeService.addPolicies(context, policiesBitstreamToAdd, bitstream);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -765,9 +761,10 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
|
|||||||
authorizeService.removeAllPoliciesByDSOAndType(context, item, ResourcePolicy.TYPE_WORKFLOW);
|
authorizeService.removeAllPoliciesByDSOAndType(context, item, ResourcePolicy.TYPE_WORKFLOW);
|
||||||
|
|
||||||
// add default policies only if not already in place
|
// add default policies only if not already in place
|
||||||
List<ResourcePolicy> policiesToAdd = filterPoliciesToAdd(context, defaultCollectionPolicies, item);
|
addDefaultPoliciesNotInPlace(context, item, defaultCollectionPolicies);
|
||||||
authorizeService.addPolicies(context, policiesToAdd, item);
|
}
|
||||||
} finally {
|
finally
|
||||||
|
{
|
||||||
context.restoreAuthSystemState();
|
context.restoreAuthSystemState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -889,22 +886,35 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
|
|||||||
return collectionService.canEditBoolean(context, item.getOwningCollection(), false);
|
return collectionService.canEditBoolean(context, item.getOwningCollection(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
With every finished submission a bunch of resource policy entries with have null value for the dspace_object column are generated in the database.
|
||||||
|
prevent the generation of resource policy entry values with null dspace_object as value
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
protected List<ResourcePolicy> filterPoliciesToAdd(Context context, List<ResourcePolicy> defaultCollectionPolicies, DSpaceObject dso) throws SQLException, AuthorizeException {
|
/**
|
||||||
List<ResourcePolicy> policiesToAdd = new ArrayList<>();
|
* Add the default policies, which have not been already added to the given DSpace object
|
||||||
for (ResourcePolicy defaultCollectionPolicy : defaultCollectionPolicies){
|
*
|
||||||
//We do NOT alter the defaultCollectionPolicy since we would lose it if we do, instead clone it
|
* @param context
|
||||||
ResourcePolicy rp = (ResourcePolicy) resourcePolicyService.clone(context, defaultCollectionPolicy);
|
* @param dso
|
||||||
|
* @param defaultCollectionPolicies
|
||||||
rp.setAction(Constants.READ);
|
* @throws SQLException
|
||||||
// if an identical policy is already in place don't add it
|
* @throws AuthorizeException
|
||||||
if(!authorizeService.isAnIdenticalPolicyAlreadyInPlace(context, dso, rp)){
|
*/
|
||||||
rp.setRpType(ResourcePolicy.TYPE_INHERITED);
|
protected void addDefaultPoliciesNotInPlace(Context context, DSpaceObject dso, List<ResourcePolicy> defaultCollectionPolicies) throws SQLException, AuthorizeException
|
||||||
policiesToAdd.add(rp);
|
{
|
||||||
|
for (ResourcePolicy defaultPolicy : defaultCollectionPolicies)
|
||||||
|
{
|
||||||
|
if (!authorizeService.isAnIdenticalPolicyAlreadyInPlace(context, dso, defaultPolicy.getGroup(), Constants.READ, defaultPolicy.getID()))
|
||||||
|
{
|
||||||
|
ResourcePolicy newPolicy = resourcePolicyService.clone(context, defaultPolicy);
|
||||||
|
newPolicy.setdSpaceObject(dso);
|
||||||
|
newPolicy.setAction(Constants.READ);
|
||||||
|
newPolicy.setRpType(ResourcePolicy.TYPE_INHERITED);
|
||||||
|
resourcePolicyService.update(context, newPolicy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return policiesToAdd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user