/// <summary> /// Called to write save audit log entries. /// </summary> /// <param name="success">if set to <c>true</c> [success].</param> /// <param name="accessRuleDetails">The access rule details.</param> protected override void OnWriteSaveAuditLogEntries(bool success, AuditLogAccessRuleDetails accessRuleDetails) { if (accessRuleDetails.IsTemporaryId) { // Access rule is being created AuditLog.OnCreateAccessRule(success, accessRuleDetails.SubjectName, accessRuleDetails.SecuredTypeName); } if (!accessRuleDetails.IsTemporaryId && accessRuleDetails.OldPermissions.Count > 0 || accessRuleDetails.NewPermissions.Count > 0) { // Access rule permissions have changed AuditLog.OnChangeAccessRulePermissions(success, accessRuleDetails.SubjectName, accessRuleDetails.SecuredTypeName, accessRuleDetails.AccessRuleReportName, accessRuleDetails.OldPermissions, accessRuleDetails.NewPermissions); } if (!accessRuleDetails.IsTemporaryId && accessRuleDetails.Enabled != accessRuleDetails.OldEnabled) { // Access rule enabled state has changed AuditLog.OnEnableAccessRule(success, accessRuleDetails.SubjectName, accessRuleDetails.SecuredTypeName, accessRuleDetails.AccessRuleReportName, accessRuleDetails.OldEnabled, accessRuleDetails.Enabled); } if (!accessRuleDetails.IsTemporaryId && accessRuleDetails.IsAccessRuleReportChanged) { // Access rule query has changed AuditLog.OnChangeAccessRuleQuery(success, accessRuleDetails.SubjectName, accessRuleDetails.SecuredTypeName, accessRuleDetails.AccessRuleReportName); } }
/// <summary> /// Called to gather audit log entity details for delete. /// </summary> /// <param name="accessRule">The access rule.</param> /// <returns></returns> protected override AuditLogAccessRuleDetails OnGatherAuditLogEntityDetailsForDelete(AccessRule accessRule) { var accessRuleDetails = new AuditLogAccessRuleDetails { IsTemporaryId = false }; SecurableEntity controlAccess = accessRule.ControlAccess; if (controlAccess != null) { accessRuleDetails.SecuredTypeName = controlAccess.Name; } Subject allowAccessBy = accessRule.AllowAccessBy; if (allowAccessBy != null) { accessRuleDetails.SubjectName = allowAccessBy.Name; } Report accessRuleReport = accessRule.AccessRuleReport; if (accessRuleReport != null) { accessRuleDetails.AccessRuleReportName = accessRuleReport.Name; } return(accessRuleDetails); }
/// <summary> /// Called to gather audit log entity details for save. /// </summary> /// <param name="accessRule">The access rule.</param> /// <returns></returns> protected override AuditLogAccessRuleDetails OnGatherAuditLogEntityDetailsForSave(AccessRule accessRule) { var accessRuleInternal = accessRule as IEntityInternal; IEntityFieldValues fields; IDictionary <long, IChangeTracker <IMutableIdKey> > forwardRelationships; IDictionary <long, IChangeTracker <IMutableIdKey> > reverseRelationships; accessRule.GetChanges(out fields, out forwardRelationships, out reverseRelationships); var oldAccessRule = new Lazy <AccessRule>(() => Entity.Get <AccessRule>(accessRule.Id)); IEnumerable <EntityRef> idsToLoad = new List <EntityRef> { "core:accessRuleEnabled", "core:permissionAccess", "core:accessRuleReport" }; Dictionary <string, IEntity> fieldEntities = Entity.Get(idsToLoad).ToDictionary(e => e.Alias); var accessRuleDetails = new AuditLogAccessRuleDetails { IsTemporaryId = accessRuleInternal.IsTemporaryId }; if (fields != null && fields.Any()) { object fieldObj; if (fields.TryGetValue(fieldEntities["accessRuleEnabled"].Id, out fieldObj)) { // Enabled was changed accessRuleDetails.Enabled = fieldObj as bool?; accessRuleDetails.OldEnabled = oldAccessRule.Value.AccessRuleEnabled; } } SecurableEntity controlAccess = accessRule.ControlAccess; if (controlAccess != null) { accessRuleDetails.SecuredTypeName = controlAccess.Name; } Subject allowAccessBy = accessRule.AllowAccessBy; if (allowAccessBy != null) { accessRuleDetails.SubjectName = allowAccessBy.Name; } Report accessRuleReport = accessRule.AccessRuleReport; if (accessRuleReport != null) { accessRuleDetails.AccessRuleReportName = accessRuleReport.Name; } if (forwardRelationships != null && forwardRelationships.Count > 0) { IChangeTracker <IMutableIdKey> permissionsTracker; if (forwardRelationships.TryGetValue(fieldEntities["permissionAccess"].Id, out permissionsTracker)) { IEntityCollection <Permission> oldPermissions = oldAccessRule.Value.PermissionAccess; if (oldPermissions != null) { accessRuleDetails.OldPermissions.UnionWith(oldPermissions.Select(e => e.Name)); } IEntityCollection <Permission> newPermissions = accessRule.PermissionAccess; if (newPermissions != null) { accessRuleDetails.NewPermissions.UnionWith(newPermissions.Select(e => e.Name)); } } IChangeTracker <IMutableIdKey> reportTracker; if (forwardRelationships.TryGetValue(fieldEntities["accessRuleReport"].Id, out reportTracker)) { accessRuleDetails.IsAccessRuleReportChanged = true; } } return(accessRuleDetails); }
/// <summary> /// Called to write delete audit log entries. /// </summary> /// <param name="success">if set to <c>true</c> [success].</param> /// <param name="accessRuleDetails">The access rule details.</param> protected override void OnWriteDeleteAuditLogEntries(bool success, AuditLogAccessRuleDetails accessRuleDetails) { AuditLog.OnDeleteAccessRule(success, accessRuleDetails.SubjectName, accessRuleDetails.SecuredTypeName, accessRuleDetails.AccessRuleReportName); }