RM-5236 Audit user group events.

Add audit events for user group creation and deletion.

Also update the create user event so that the username is still displayed after the user is deleted.
This commit is contained in:
Tom Page
2018-04-24 10:41:06 +01:00
parent 9a8cc02e51
commit 4dc86b420d
4 changed files with 113 additions and 32 deletions

View File

@@ -53,6 +53,7 @@
</bean> </bean>
<bean id="audit-event.create-person" parent="audit-event" class="org.alfresco.module.org_alfresco_module_rm.audit.event.CreatePersonAuditEvent"> <bean id="audit-event.create-person" parent="audit-event" class="org.alfresco.module.org_alfresco_module_rm.audit.event.CreatePersonAuditEvent">
<property name="nodeService" ref="nodeService" />
<property name="name" value="Create Person"/> <property name="name" value="Create Person"/>
<property name="label" value="rm.audit.create-person"/> <property name="label" value="rm.audit.create-person"/>
</bean> </bean>
@@ -65,6 +66,7 @@
</bean> </bean>
<bean id="audit-event.create-userGroup" parent="audit-event" class="org.alfresco.module.org_alfresco_module_rm.audit.event.CreateUserGroupAuditEvent"> <bean id="audit-event.create-userGroup" parent="audit-event" class="org.alfresco.module.org_alfresco_module_rm.audit.event.CreateUserGroupAuditEvent">
<property name="nodeService" ref="nodeService" />
<property name="name" value="Create User Group"/> <property name="name" value="Create User Group"/>
<property name="label" value="rm.audit.create-userGroup"/> <property name="label" value="rm.audit.create-userGroup"/>
</bean> </bean>

View File

@@ -1503,31 +1503,7 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
json.put("fullName", entry.getFullName() == null ? "": entry.getFullName()); json.put("fullName", entry.getFullName() == null ? "": entry.getFullName());
json.put("nodeRef", entry.getNodeRef() == null ? "": entry.getNodeRef()); json.put("nodeRef", entry.getNodeRef() == null ? "": entry.getNodeRef());
// TODO: Find another way for checking the event setNodeName(entry, json);
if (entry.getEvent().equals("Create Person") && entry.getNodeRef() != null)
{
NodeRef nodeRef = entry.getNodeRef();
String userName = null;
if(nodeService.exists(nodeRef))
{
userName = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_USERNAME);
}
json.put("nodeName", userName == null ? "": userName);
json.put("createPerson", true);
}
else if (entry.getEvent().equals("Delete Person") && entry.getNodeRef() != null)
{
if (entry.getBeforeProperties() != null)
{
String userName = (String) entry.getBeforeProperties().get(ContentModel.PROP_USERNAME);
json.put("nodeName", userName == null ? "" : userName);
}
json.put("deletePerson", true);
}
else
{
json.put("nodeName", entry.getNodeName() == null ? "": entry.getNodeName());
}
// TODO: Find another way for checking the event // TODO: Find another way for checking the event
if (entry.getEvent().equals("Delete RM Object")) if (entry.getEvent().equals("Delete RM Object"))
@@ -1586,6 +1562,65 @@ public class RecordsManagementAuditServiceImpl extends AbstractLifecycleBean
} }
} }
/**
* Update a JSON object with a node name for an audit event.
*
* @param entry The audit event.
* @param json The object to update.
* @throws JSONException If there is a problem updating the JSON.
*/
private void setNodeName(RecordsManagementAuditEntry entry, JSONObject json) throws JSONException
{
String nodeName = null;
if (entry.getNodeRef() != null)
{
// TODO: Find another way for checking the event
switch (entry.getEvent())
{
case "Create Person":
if (entry.getAfterProperties() != null)
{
nodeName = (String) entry.getAfterProperties().get(ContentModel.PROP_USERNAME);
}
// This is needed as older audit events (pre-2.7) were created without PROP_USERNAME being set.
NodeRef nodeRef = entry.getNodeRef();
if (nodeName == null && nodeService.exists(nodeRef))
{
nodeName = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_USERNAME);
}
json.put("createPerson", true);
break;
case "Delete Person":
if (entry.getBeforeProperties() != null)
{
nodeName = (String) entry.getBeforeProperties().get(ContentModel.PROP_USERNAME);
}
json.put("deletePerson", true);
break;
case "Create User Group":
if (entry.getAfterProperties() != null)
{
nodeName = (String) entry.getAfterProperties().get(ContentModel.PROP_AUTHORITY_NAME);
}
break;
case "Delete User Group":
if (entry.getBeforeProperties() != null)
{
nodeName = (String) entry.getBeforeProperties().get(ContentModel.PROP_AUTHORITY_NAME);
}
break;
default:
nodeName = entry.getNodeName();
break;
}
}
json.put("nodeName", nodeName == null ? "" : nodeName);
}
/** /**
* Helper method to convert value to MLText * Helper method to convert value to MLText
* *

View File

@@ -27,11 +27,18 @@
package org.alfresco.module.org_alfresco_module_rm.audit.event; package org.alfresco.module.org_alfresco_module_rm.audit.event;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy; import org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy;
import org.alfresco.repo.policy.annotation.Behaviour; import org.alfresco.repo.policy.annotation.Behaviour;
import org.alfresco.repo.policy.annotation.BehaviourBean; import org.alfresco.repo.policy.annotation.BehaviourBean;
import org.alfresco.repo.policy.annotation.BehaviourKind; import org.alfresco.repo.policy.annotation.BehaviourKind;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
/** /**
* Audits person creation. * Audits person creation.
@@ -42,17 +49,30 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef;
@BehaviourBean @BehaviourBean
public class CreatePersonAuditEvent extends AuditEvent implements OnCreateNodePolicy public class CreatePersonAuditEvent extends AuditEvent implements OnCreateNodePolicy
{ {
/** Node Service */
private NodeService nodeService;
/**
* Sets the node service
*
* @param nodeService nodeService to set
*/
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
/** /**
* @see org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy#onCreateNode(org.alfresco.service.cmr.repository.ChildAssociationRef) * @see org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy#onCreateNode(org.alfresco.service.cmr.repository.ChildAssociationRef)
*/ */
@Override @Override
@Behaviour @Behaviour(kind = BehaviourKind.CLASS, type = "cm:person")
(
kind = BehaviourKind.CLASS,
type = "cm:person"
)
public void onCreateNode(ChildAssociationRef childAssocRef) public void onCreateNode(ChildAssociationRef childAssocRef)
{ {
recordsManagementAuditService.auditEvent(childAssocRef.getChildRef(), getName()); Map<QName, Serializable> auditProperties = new HashMap<>();
auditProperties.put(ContentModel.PROP_USERNAME,
nodeService.getProperty(childAssocRef.getChildRef(), ContentModel.PROP_USERNAME));
recordsManagementAuditService.auditEvent(childAssocRef.getChildRef(), getName(), null, auditProperties);
} }
} }

View File

@@ -26,11 +26,18 @@
*/ */
package org.alfresco.module.org_alfresco_module_rm.audit.event; package org.alfresco.module.org_alfresco_module_rm.audit.event;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy; import org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy;
import org.alfresco.repo.policy.annotation.Behaviour; import org.alfresco.repo.policy.annotation.Behaviour;
import org.alfresco.repo.policy.annotation.BehaviourBean; import org.alfresco.repo.policy.annotation.BehaviourBean;
import org.alfresco.repo.policy.annotation.BehaviourKind; import org.alfresco.repo.policy.annotation.BehaviourKind;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
/** /**
* Audits user group creation. * Audits user group creation.
@@ -41,10 +48,27 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef;
@BehaviourBean @BehaviourBean
public class CreateUserGroupAuditEvent extends AuditEvent implements OnCreateNodePolicy public class CreateUserGroupAuditEvent extends AuditEvent implements OnCreateNodePolicy
{ {
/** Node Service */
private NodeService nodeService;
/**
* Sets the node service
*
* @param nodeService nodeService to set
*/
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
@Override @Override
@Behaviour(kind = BehaviourKind.CLASS, type = "cm:authorityContainer") @Behaviour(kind = BehaviourKind.CLASS, type = "cm:authorityContainer")
public void onCreateNode(ChildAssociationRef childAssocRef) public void onCreateNode(ChildAssociationRef childAssocRef)
{ {
recordsManagementAuditService.auditEvent(childAssocRef.getChildRef(), getName()); Map<QName, Serializable> auditProperties = new HashMap<>();
auditProperties.put(ContentModel.PROP_AUTHORITY_NAME,
nodeService.getProperty(childAssocRef.getChildRef(), ContentModel.PROP_AUTHORITY_NAME));
recordsManagementAuditService.auditEvent(childAssocRef.getChildRef(), getName(), null, auditProperties);
} }
} }