mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-16 06:23:10 +00:00
add support to enable/disable append-mode of DefaultReadGroups via conf
This commit is contained in:
@@ -17,6 +17,7 @@ import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -1050,7 +1051,8 @@ prevent the generation of resource policy entry values with null dspace_object a
|
||||
for (ResourcePolicy defaultPolicy : defaultCollectionPolicies) {
|
||||
if (!authorizeService
|
||||
.isAnIdenticalPolicyAlreadyInPlace(context, dso, defaultPolicy.getGroup(), Constants.READ,
|
||||
defaultPolicy.getID()) && this.isNotAlreadyACustomRPOfThisTypeOnDSO(context, dso)) {
|
||||
defaultPolicy.getID()) && this.isNotAlreadyACustomRPOfThisTypeOnDSO(context, dso)
|
||||
&& this.isNotCustomX(context, dso, defaultPolicy)) {
|
||||
ResourcePolicy newPolicy = resourcePolicyService.clone(context, defaultPolicy);
|
||||
newPolicy.setdSpaceObject(dso);
|
||||
newPolicy.setAction(Constants.READ);
|
||||
@@ -1070,15 +1072,35 @@ prevent the generation of resource policy entry values with null dspace_object a
|
||||
* @throws SQLException If something goes wrong retrieving the RP on the DSO
|
||||
*/
|
||||
private boolean isNotAlreadyACustomRPOfThisTypeOnDSO(Context context, DSpaceObject dso) throws SQLException {
|
||||
List<ResourcePolicy> readRPs = resourcePolicyService.find(context, dso, Constants.READ);
|
||||
for (ResourcePolicy readRP : readRPs) {
|
||||
if (readRP.getRpType() != null && readRP.getRpType().equals(ResourcePolicy.TYPE_CUSTOM)) {
|
||||
return false;
|
||||
if (!configurationService.getBooleanProperty("core.authorization.installitem.inheritance-read.append-mode",
|
||||
false)) {
|
||||
List<ResourcePolicy> readRPs = resourcePolicyService.find(context, dso, Constants.READ);
|
||||
for (ResourcePolicy readRP : readRPs) {
|
||||
if (readRP.getRpType() != null && readRP.getRpType().equals(ResourcePolicy.TYPE_CUSTOM)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isNotCustomX(Context context, DSpaceObject dso, ResourcePolicy defaultPolicy) throws SQLException {
|
||||
boolean hasCustomPolicy = resourcePolicyService.find(context, dso, Constants.READ)
|
||||
.stream()
|
||||
.filter(rp -> (Objects.nonNull(rp.getRpType()) &&
|
||||
Objects.equals(rp.getRpType(), ResourcePolicy.TYPE_CUSTOM)))
|
||||
.findFirst()
|
||||
.isPresent();
|
||||
|
||||
boolean isAnonimousGroup = Objects.nonNull(defaultPolicy.getGroup()) &&
|
||||
StringUtils.equals(defaultPolicy.getGroup().getName(),Group.ANONYMOUS) ? true : false;
|
||||
|
||||
boolean datesAreNull = Objects.isNull(defaultPolicy.getStartDate()) &&
|
||||
Objects.isNull(defaultPolicy.getEndDate()) ? true : false;
|
||||
|
||||
return !(hasCustomPolicy && isAnonimousGroup && datesAreNull);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an iterator of Items possessing the passed metadata field, or only
|
||||
* those matching the passed value, if value is not Item.ANY
|
||||
|
Reference in New Issue
Block a user