fix inherit of policies in submission

This commit is contained in:
Mykhaylo
2022-01-25 17:48:49 +01:00
parent 5bbe4430bf
commit b83291748a
2 changed files with 15 additions and 1 deletions

View File

@@ -508,9 +508,10 @@ public class AuthorizeServiceImpl implements AuthorizeService {
List<ResourcePolicy> policies = getPolicies(c, src); List<ResourcePolicy> policies = getPolicies(c, src);
//Only inherit non-ADMIN policies (since ADMIN policies are automatically inherited) //Only inherit non-ADMIN policies (since ADMIN policies are automatically inherited)
//and non-custom policies as these are manually applied when appropriate
List<ResourcePolicy> nonAdminPolicies = new ArrayList<>(); List<ResourcePolicy> nonAdminPolicies = new ArrayList<>();
for (ResourcePolicy rp : policies) { for (ResourcePolicy rp : policies) {
if (rp.getAction() != Constants.ADMIN) { if (rp.getAction() != Constants.ADMIN && !ResourcePolicy.TYPE_CUSTOM.contentEquals(rp.getRpType())) {
nonAdminPolicies.add(rp); nonAdminPolicies.add(rp);
} }
} }

View File

@@ -850,6 +850,8 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
List<ResourcePolicy> defaultCollectionPolicies = authorizeService List<ResourcePolicy> defaultCollectionPolicies = authorizeService
.getPoliciesActionFilter(context, collection, Constants.DEFAULT_BITSTREAM_READ); .getPoliciesActionFilter(context, collection, Constants.DEFAULT_BITSTREAM_READ);
List<ResourcePolicy> defaultItemPolicies = authorizeService.findPoliciesByDSOAndType(context, item,
ResourcePolicy.TYPE_CUSTOM);
if (defaultCollectionPolicies.size() < 1) { if (defaultCollectionPolicies.size() < 1) {
throw new SQLException("Collection " + collection.getID() throw new SQLException("Collection " + collection.getID()
+ " (" + collection.getHandle() + ")" + " (" + collection.getHandle() + ")"
@@ -864,12 +866,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);
addCustomPoliciesNotInPlace(context, mybundle, defaultItemPolicies);
addDefaultPoliciesNotInPlace(context, mybundle, defaultCollectionPolicies); addDefaultPoliciesNotInPlace(context, mybundle, defaultCollectionPolicies);
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);
addCustomPoliciesNotInPlace(context, bitstream, defaultItemPolicies);
addDefaultPoliciesNotInPlace(context, bitstream, defaultCollectionPolicies); addDefaultPoliciesNotInPlace(context, bitstream, defaultCollectionPolicies);
} }
} }
@@ -1064,6 +1068,15 @@ prevent the generation of resource policy entry values with null dspace_object a
} }
} }
private void addCustomPoliciesNotInPlace(Context context, DSpaceObject dso, List<ResourcePolicy> customPolicies)
throws SQLException, AuthorizeException {
boolean customPoliciesAlreadyInPlace = authorizeService
.findPoliciesByDSOAndType(context, dso, ResourcePolicy.TYPE_CUSTOM).size() > 0;
if (!customPoliciesAlreadyInPlace) {
authorizeService.addPolicies(context, customPolicies, dso);
}
}
/** /**
* Check whether or not there is already an RP on the given dso, which has actionId={@link Constants.READ} and * Check whether or not there is already an RP on the given dso, which has actionId={@link Constants.READ} and
* resourceTypeId={@link ResourcePolicy.TYPE_CUSTOM} * resourceTypeId={@link ResourcePolicy.TYPE_CUSTOM}