diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-condition-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-condition-context.xml index b78ae135ae..e6cc400c73 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-condition-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-condition-context.xml @@ -202,4 +202,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-freeze-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-freeze-context.xml index fceb2d0549..b11094ba49 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-freeze-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-freeze-context.xml @@ -85,6 +85,7 @@ + @@ -106,6 +107,7 @@ + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/HoldCapabilityCondition.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/HoldCapabilityCondition.java new file mode 100644 index 0000000000..535a9ebcc6 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/declarative/condition/HoldCapabilityCondition.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.capability.declarative.condition; + +import java.util.List; + +import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; +import org.alfresco.module.org_alfresco_module_rm.capability.declarative.AbstractCapabilityCondition; +import org.alfresco.module.org_alfresco_module_rm.hold.HoldService; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.security.AccessStatus; + +/** + * Add to hold evaluator. + *

+ * Determines whether the current user has access to any holds. + * + * @author Roy Wetherall + */ +public class HoldCapabilityCondition extends AbstractCapabilityCondition +{ + /** indicates whether to evaluate holds that the node is within or not within */ + private boolean includedInHold = false;; + + /** hold service */ + private HoldService holdService; + + /** + * @param includedInHold true if holds node within, false otherwise + */ + public void setIncludedInHold(boolean includedInHold) + { + this.includedInHold = includedInHold; + } + + /** + * @param holdService hold service + */ + public void setHoldService(HoldService holdService) + { + this.holdService = holdService; + } + + @Override + public boolean evaluate(NodeRef nodeRef) + { + boolean result = false; + + List holds = holdService.heldBy(nodeRef, includedInHold); + for (NodeRef hold : holds) + { + // return true as soon as we find one hold we have filling permission on + if (AccessStatus.ALLOWED.equals(permissionService.hasPermission(hold, RMPermissionModel.FILING))) + { + result = true; + break; + } + } + + return result; + } +}