Skip to content

Commit

Permalink
Fix to adjusting bundle and bitstream policies (item install, embargo…
Browse files Browse the repository at this point in the history
… lift)

Apply DEFAULT_ITEM_READ to bundles, not DEFAULT_BITSTREAM_READ so that
files can be listed if the item / default item is readable
  • Loading branch information
kshepherd committed Jun 12, 2023
1 parent 9c6d2bf commit 53afa26
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java
Expand Up @@ -930,16 +930,23 @@ public void inheritCollectionDefaultPolicies(Context context, Item item, Collect
@Override
public void adjustBundleBitstreamPolicies(Context context, Item item, Collection collection)
throws SQLException, AuthorizeException {
List<ResourcePolicy> defaultCollectionPolicies = authorizeService
// Bundles should inherit from DEFAULT_ITEM_READ so that if the item is readable, the files
// can be listed (even if they are themselves not readable as per DEFAULT_BITSTREAM_READ or other
// policies or embargos applied
List<ResourcePolicy> defaultCollectionBundlePolicies = authorizeService
.getPoliciesActionFilter(context, collection, Constants.DEFAULT_ITEM_READ);
// Bitstreams should inherit from DEFAULT_BITSTREAM_READ
List<ResourcePolicy> defaultCollectionBitstreamPolicies = authorizeService
.getPoliciesActionFilter(context, collection, Constants.DEFAULT_BITSTREAM_READ);

List<ResourcePolicy> defaultItemPolicies = authorizeService.findPoliciesByDSOAndType(context, item,
ResourcePolicy.TYPE_CUSTOM);
if (defaultCollectionPolicies.size() < 1) {
if (defaultCollectionBitstreamPolicies.size() < 1) {
throw new SQLException("Collection " + collection.getID()
+ " (" + collection.getHandle() + ")"
+ " has no default bitstream READ policies");
}
// TODO: should we also throw an exception if no DEFAULT_ITEM_READ?

// remove all policies from bundles, add new ones
// Remove bundles
Expand All @@ -950,14 +957,14 @@ public void adjustBundleBitstreamPolicies(Context context, Item item, Collection
authorizeService.removeAllPoliciesByDSOAndType(context, mybundle, ResourcePolicy.TYPE_SUBMISSION);
authorizeService.removeAllPoliciesByDSOAndType(context, mybundle, ResourcePolicy.TYPE_WORKFLOW);
addCustomPoliciesNotInPlace(context, mybundle, defaultItemPolicies);
addDefaultPoliciesNotInPlace(context, mybundle, defaultCollectionPolicies);
addDefaultPoliciesNotInPlace(context, mybundle, defaultCollectionBundlePolicies);

for (Bitstream bitstream : mybundle.getBitstreams()) {
// if come from InstallItem: remove all submission/workflow policies
authorizeService.removeAllPoliciesByDSOAndType(context, bitstream, ResourcePolicy.TYPE_SUBMISSION);
authorizeService.removeAllPoliciesByDSOAndType(context, bitstream, ResourcePolicy.TYPE_WORKFLOW);
addCustomPoliciesNotInPlace(context, bitstream, defaultItemPolicies);
addDefaultPoliciesNotInPlace(context, bitstream, defaultCollectionPolicies);
addDefaultPoliciesNotInPlace(context, bitstream, defaultCollectionBitstreamPolicies);
}
}
}
Expand Down

0 comments on commit 53afa26

Please sign in to comment.