Merged V21 to HEAD:

62861: RM-1261: Records/Folders scheduled for destruction can be deleted by user without required capabilities
          RM-1258: It's possible to edit, delete and create (via copy) new category without "Create Modify Destroy File Plan Metadata" capability 
   62862: RM-1267: Delete Record capability is needed to delete the reference



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@62863 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2014-02-20 04:25:16 +00:00
4 changed files with 87 additions and 27 deletions

View File

@@ -19,11 +19,9 @@
<property name="private" value="true"/> <property name="private" value="true"/>
<property name="capabilities"> <property name="capabilities">
<list> <list>
<ref bean="rmDestroyRecordsScheduledForDestructionCapability"/>
<ref bean="rmDestroyRecordsCapability"/>
<ref bean="rmDeleteRecordsCapability"/> <ref bean="rmDeleteRecordsCapability"/>
<ref bean="rmCreateModifyDestroyFileplanMetadataCapability"/> <ref bean="rmCreateModifyDestroyFileplanMetadataCapability"/>
<ref bean="rmCreateModifyDestroyFoldersCapability"/> <ref bean="rmDeleteRecordFolderCapability"/>
</list> </list>
</property> </property>
</bean> </bean>
@@ -35,7 +33,7 @@
<property name="private" value="true"/> <property name="private" value="true"/>
<property name="capabilities"> <property name="capabilities">
<list> <list>
<ref bean="rmCreateModifyDestroyFoldersCapability"/> <ref bean="rmModifyRecordFolderCapability"/>
<ref bean="rmCreateModifyDestroyFileplanMetadataCapability"/> <ref bean="rmCreateModifyDestroyFileplanMetadataCapability"/>
<ref bean="rmEditDeclaredRecordMetadataCapability"/> <ref bean="rmEditDeclaredRecordMetadataCapability"/>
<ref bean="rmEditNonRecordMetadataCapability"/> <ref bean="rmEditNonRecordMetadataCapability"/>
@@ -52,7 +50,7 @@
<property name="private" value="true"/> <property name="private" value="true"/>
<property name="capabilities"> <property name="capabilities">
<list> <list>
<ref bean="rmCreateModifyDestroyFoldersCapability"/> <ref bean="rmModifyRecordFolderCapability"/>
<ref bean="rmCreateModifyDestroyFileplanMetadataCapability"/> <ref bean="rmCreateModifyDestroyFileplanMetadataCapability"/>
<ref bean="rmEditDeclaredRecordMetadataCapability"/> <ref bean="rmEditDeclaredRecordMetadataCapability"/>
<ref bean="rmEditNonRecordMetadataCapability"/> <ref bean="rmEditNonRecordMetadataCapability"/>

View File

@@ -25,25 +25,21 @@
</bean> </bean>
<bean id="rmCreateModifyDestroyFoldersCapability" <bean id="rmCreateModifyDestroyFoldersCapability"
parent="declarativeCapability"> parent="compositeCapability">
<property name="name" value="CreateModifyDestroyFolders"/> <property name="name" value="CreateModifyDestroyFolders"/>
<property name="permission" value="CreateModifyDestroyFolders"/> <property name="permission" value="CreateModifyDestroyFolders"/>
<property name="kinds">
<property name="capabilities">
<list> <list>
<value>RECORD_CATEGORY</value> <ref bean="rmCreateRecordFolderCapability"/>
<value>RECORD_FOLDER</value> <ref bean="rmModifyRecordFolderCapability"/>
<ref bean="rmDeleteRecordFolderCapability"/>
<value>UNFILED_RECORD_CONTAINER</value> <value>UNFILED_RECORD_CONTAINER</value>
<value>UNFILED_RECORD_CONTAINER_CHILD</value> <value>UNFILED_RECORD_CONTAINER_CHILD</value>
</list> </list>
</property> </property>
<property name="conditions">
<map>
<entry key="capabilityCondition.filling" value="true"/>
<entry key="capabilityCondition.cutoff" value="false"/>
<entry key="capabilityCondition.frozen" value="false"/>
<entry key="capabilityCondition.closed" value="false"/>
</map>
</property>
<property name="group"><ref bean="folderControlGroup"/></property> <property name="group"><ref bean="folderControlGroup"/></property>
<property name="index" value="20" /> <property name="index" value="20" />
</bean> </bean>
@@ -71,6 +67,63 @@
<!-- Unassignable --> <!-- Unassignable -->
<bean id="rmCreateRecordFolderCapability"
parent="declarativeCapability">
<property name="name" value="CreateRecordFolder"/>
<property name="permission" value="CreateModifyDestroyFolders"/>
<property name="private" value="true"/>
<property name="kinds">
<list>
<value>RECORD_CATEGORY</value>
</list>
</property>
<property name="conditions">
<map>
<entry key="capabilityCondition.filling" value="true"/>
</map>
</property>
</bean>
<bean id="rmModifyRecordFolderCapability"
parent="declarativeCapability">
<property name="name" value="ModifyRecordFolder"/>
<property name="private" value="true"/>
<property name="permission" value="CreateModifyDestroyFolders"/>
<property name="kinds">
<list>
<value>RECORD_FOLDER</value>
</list>
</property>
<property name="conditions">
<map>
<entry key="capabilityCondition.filling" value="true"/>
<entry key="capabilityCondition.cutoff" value="false"/>
<entry key="capabilityCondition.frozen" value="false"/>
<entry key="capabilityCondition.closed" value="false"/>
</map>
</property>
</bean>
<bean id="rmDeleteRecordFolderCapability"
parent="declarativeCapability">
<property name="name" value="DeleteRecordFolder"/>
<property name="private" value="true"/>
<property name="permission" value="CreateModifyDestroyFolders"/>
<property name="kinds">
<list>
<value>RECORD_FOLDER</value>
</list>
</property>
<property name="conditions">
<map>
<entry key="capabilityCondition.filling" value="true"/>
<entry key="capabilityCondition.cutoff" value="false"/>
<entry key="capabilityCondition.frozen" value="false"/>
<entry key="capabilityCondition.closed" value="false"/>
</map>
</property>
</bean>
<bean id="rmMoveRecordFolderCapability" <bean id="rmMoveRecordFolderCapability"
parent="compositeCapability"> parent="compositeCapability">
<property name="name" value="MoveRecordFolder"/> <property name="name" value="MoveRecordFolder"/>

View File

@@ -50,7 +50,7 @@ capability.UpdateTriggerDates.title=Update Trigger Dates
capability.ManuallyChangeDispositionDates.title=Manually Change Disposition Dates capability.ManuallyChangeDispositionDates.title=Manually Change Disposition Dates
capability.AuthorizeNominatedTransfers.title=Authorize Nominated Transfers capability.AuthorizeNominatedTransfers.title=Authorize Nominated Transfers
capability.AuthorizeAllTransfers.title=Authorize All Transfers capability.AuthorizeAllTransfers.title=Authorize All Transfers
capability.DestroyRecordsScheduledForDestruction.title=Destroy Records Scheduled for Destruction capability.DestroyRecordsScheduledForDestruction.title=Destroy Record or Record Folder Scheduled for Destruction
capability.DestroyRecords.title=Destroy Records capability.DestroyRecords.title=Destroy Records
capability.DeleteRecords.title=Delete Records capability.DeleteRecords.title=Delete Records
capability.TriggerAnEvent.title=Trigger An Event capability.TriggerAnEvent.title=Trigger An Event

View File

@@ -1149,7 +1149,7 @@ public class RecordsManagementAdminServiceImpl implements RecordsManagementAdmin
/** /**
* @see org.alfresco.module.org_alfresco_module_rm.admin.RecordsManagementAdminService#removeCustomReference(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) * @see org.alfresco.module.org_alfresco_module_rm.admin.RecordsManagementAdminService#removeCustomReference(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
*/ */
public void removeCustomReference(NodeRef fromNode, NodeRef toNode, QName assocId) public void removeCustomReference(final NodeRef fromNode, final NodeRef toNode, final QName assocId)
{ {
Map<QName, AssociationDefinition> availableAssocs = this.getCustomReferenceDefinitions(); Map<QName, AssociationDefinition> availableAssocs = this.getCustomReferenceDefinitions();
@@ -1166,6 +1166,11 @@ public class RecordsManagementAdminServiceImpl implements RecordsManagementAdmin
// TODO: Ask for a more efficient method such as // TODO: Ask for a more efficient method such as
// nodeService.removeChildAssociation(fromNode, toNode, chRef.getTypeQName(), null); // nodeService.removeChildAssociation(fromNode, toNode, chRef.getTypeQName(), null);
AuthenticationUtil.runAsSystem(new RunAsWork<Void>()
{
@Override
public Void doWork() throws Exception
{
List<ChildAssociationRef> children = nodeService.getChildAssocs(fromNode); List<ChildAssociationRef> children = nodeService.getChildAssocs(fromNode);
for (ChildAssociationRef chRef : children) for (ChildAssociationRef chRef : children)
{ {
@@ -1174,6 +1179,10 @@ public class RecordsManagementAdminServiceImpl implements RecordsManagementAdmin
nodeService.removeChildAssociation(chRef); nodeService.removeChildAssociation(chRef);
} }
} }
return null;
}
});
} }
else else
{ {