/// <summary> /// Called to write save audit log entries. /// </summary> /// <param name="success">if set to <c>true</c> [success].</param> /// <param name="accessRuleDetails">The role details.</param> protected override void OnWriteSaveAuditLogEntries(bool success, AuditLogRoleDetails accessRuleDetails) { if (accessRuleDetails.IsTemporaryId) { // Role is being created AuditLog.OnCreateUserRole(success, accessRuleDetails.RoleName); } if (!accessRuleDetails.IsTemporaryId && accessRuleDetails.OldRoleName != accessRuleDetails.RoleName) { // Name has changed AuditLog.OnRenameUserRole(success, accessRuleDetails.OldRoleName, accessRuleDetails.RoleName); } if (accessRuleDetails.AddedMembers.Count > 0 || accessRuleDetails.RemovedMembers.Count > 0) { // Role membership has changed AuditLog.OnChangeUserRoleMembers(success, accessRuleDetails.RoleName, accessRuleDetails.AddedMembers, accessRuleDetails.RemovedMembers); } ISet <string> currentRole = new HashSet <string> { accessRuleDetails.RoleName }; if (accessRuleDetails.AddedIncludedByRoles.Count > 0) { foreach (string addedIncludedByRole in accessRuleDetails.AddedIncludedByRoles) { // Role membership has changed AuditLog.OnChangeUserRoleMembers(success, addedIncludedByRole, currentRole, new SortedSet <string>()); } } if (accessRuleDetails.RemovedIncludedByRoles.Count > 0) { foreach (string removedIncludedByRole in accessRuleDetails.RemovedIncludedByRoles) { // Role membership has changed AuditLog.OnChangeUserRoleMembers(success, removedIncludedByRole, new SortedSet <string>(), currentRole); } } }
/// <summary> /// Called to gather audit log entity details for save. /// </summary> /// <param name="role">The role.</param> /// <returns></returns> protected override AuditLogRoleDetails OnGatherAuditLogEntityDetailsForSave(Role role) { var roleInternal = role as IEntityInternal; IEntityFieldValues fields; IDictionary <long, IChangeTracker <IMutableIdKey> > forwardRelationships; IDictionary <long, IChangeTracker <IMutableIdKey> > reverseRelationships; role.GetChanges(out fields, out forwardRelationships, out reverseRelationships); var oldRole = new Lazy <Role>(() => Entity.Get <Role>(role.Id)); var roleDetails = new AuditLogRoleDetails { RoleName = role.Name, OldRoleName = role.Name, IsTemporaryId = roleInternal.IsTemporaryId }; IEnumerable <EntityRef> idsToLoad = new List <EntityRef> { "core:name", "core:includesRoles", "core:userHasRole" }; Dictionary <string, IEntity> fieldEntities = Entity.Get(idsToLoad).ToDictionary(e => e.Alias); if (fields != null && fields.Any()) { object fieldObj; if (fields.TryGetValue(fieldEntities["name"].Id, out fieldObj)) { // Name was changed roleDetails.OldRoleName = oldRole.Value.Name; } } if (forwardRelationships != null && forwardRelationships.Count > 0) { IChangeTracker <IMutableIdKey> includesRolesTracker; if (forwardRelationships.TryGetValue(fieldEntities["includesRoles"].Id, out includesRolesTracker)) { IEnumerable <long> addedIds = includesRolesTracker.Added.Select(a => a.Key); roleDetails.AddedMembers.UnionWith(Entity.Get <Resource>(addedIds).Select(e => e.Name)); IEnumerable <long> removedIds = includesRolesTracker.Removed.Select(a => a.Key); roleDetails.RemovedMembers.UnionWith(Entity.Get <Resource>(removedIds).Select(e => e.Name)); } } if (reverseRelationships != null && reverseRelationships.Count > 0) { IChangeTracker <IMutableIdKey> userTracker; if (reverseRelationships.TryGetValue(fieldEntities["userHasRole"].Id, out userTracker)) { IEnumerable <long> addedIds = userTracker.Added.Select(a => a.Key); roleDetails.AddedMembers.UnionWith(Entity.Get <Resource>(addedIds).Select(e => e.Name)); IEnumerable <long> removedIds = userTracker.Removed.Select(a => a.Key); roleDetails.RemovedMembers.UnionWith(Entity.Get <Resource>(removedIds).Select(e => e.Name)); } IChangeTracker <IMutableIdKey> includedByRoleTracker; if (reverseRelationships.TryGetValue(fieldEntities["includesRoles"].Id, out includedByRoleTracker)) { IEnumerable <long> addedIds = includedByRoleTracker.Added.Select(a => a.Key); roleDetails.AddedIncludedByRoles.UnionWith(Entity.Get <Resource>(addedIds).Select(e => e.Name)); IEnumerable <long> removedIds = includedByRoleTracker.Removed.Select(a => a.Key); roleDetails.RemovedIncludedByRoles.UnionWith(Entity.Get <Resource>(removedIds).Select(e => e.Name)); } } return(roleDetails); }
/// <summary> /// Called to write delete audit log entries. /// </summary> /// <param name="success">if set to <c>true</c> [success].</param> /// <param name="accessRuleDetails">The role details.</param> protected override void OnWriteDeleteAuditLogEntries(bool success, AuditLogRoleDetails accessRuleDetails) { AuditLog.OnDeleteUserRole(success, accessRuleDetails.RoleName); }