Example #1
0
        /// <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);
            }
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
 /// <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);
 }