mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-16 22:43:12 +00:00
fix inherit of policies in submission
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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}
|
||||||
|
Reference in New Issue
Block a user