예제 #1
0
        public IList <NotificationAccessException> GetNotificationAccessExceptionsForCurrentUser()
        {
            var loggedUser = AuthenticationProvider.GetLoggedUser();
            var userNotificationExceptions = NotificationAccessExceptions.Where(x => x.Users.Any(y => y == loggedUser)).ToList();

            return(userNotificationExceptions);
        }
예제 #2
0
        private Audit GetNewAudit()
        {
            var audit = new Audit(AuthenticationProvider.GetLoggedUser());

            audit.Date = SystemDateTime.Now;
            return(audit);
        }
예제 #3
0
        public IList <NotificationAccess> GetNotificationAccessesForCurrentUser()
        {
            var loggedUser               = AuthenticationProvider.GetLoggedUser();
            var loggedUserRole           = loggedUser.Role;
            var userNotificationAccesses = NotificationAccesses.Where(x =>
                                                                      x.Users.Any(y => y == loggedUser) ||
                                                                      x.AllowEveryone).ToList();

            return(userNotificationAccesses);
        }
예제 #4
0
        public void SendCreatedNotificationFor(Type type, string subject, string description)
        {
            var loggedUser = AuthenticationProvider.GetLoggedUser();

            var email = new ObjectCreatedEmailModel();

            email.Username          = loggedUser.ToDisplay();
            email.ObjectTypeCreated = TranslationService.Translate(type.Name);
            email.Description       = description;
            var notification = GetCreatedNotification(type);

            this.SendNotification(notification, subject, email);
        }
예제 #5
0
        public void UpdateExceptionsForUser(IEnumerable <int> exceptions)
        {
            var loggedUser       = AuthenticationProvider.GetLoggedUser();
            var oldExceptions    = NotificationAccessExceptions.Where(x => x.Users.Any(y => y == loggedUser));
            var oldExceptionsIds = oldExceptions.Select(x => x.Id);
            var newExceptionsIds = NotificationAccessExceptions.Where(x => exceptions.Contains(x.AssociatedNotification.Id)).Select(x => x.Id);

            var exceptionsToRemove = oldExceptions.Where(x => !newExceptionsIds.Contains(x.Id));

            foreach (var notificationAccessException in exceptionsToRemove)
            {
                notificationAccessException.Users.Remove(loggedUser);
            }

            var exceptionsToAdd = newExceptionsIds.Where(x => !oldExceptionsIds.Contains(x));

            foreach (var newException in exceptionsToAdd)
            {
                var notificationException = NotificationAccessExceptions[newException];
                notificationException.Users.Add(loggedUser);
            }
        }
예제 #6
0
        /// <summary>
        ///   Invocation of the interceptor
        /// </summary>
        /// <param name = "invocation">The invocation info.</param>
        /// <returns>return value of the invoked method</returns>
        public object ApplyTo(MethodInvocationInfo invocation)
        {
            object result;

            var         attributes = invocation.Method.GetCustomAttributes(typeof(IAuditAttribute), true);
            Audit       audit      = null;
            ActionsEnum?actionType = null;
            Type        type       = null;

            if (attributes.Length > 0)
            {
                audit = GetNewAudit();
                var auditAttribute = (IAuditAttribute)attributes[0];
                if (auditAttribute.BehaviorType != default(ActionsEnum))
                {
                    audit.Action = (int)auditAttribute.BehaviorType;
                    AuditContextManager.SetAction(auditAttribute.BehaviorType);
                    actionType = auditAttribute.BehaviorType;
                }
                if (auditAttribute.EntityType != null)
                {
                    audit.EntityType = auditAttribute.EntityType.Name;
                    AuditContextManager.SetEntityType(auditAttribute.EntityType);
                    type = auditAttribute.EntityType;
                }

                var entityIdParameterName = auditAttribute.IdField;
                if (!string.IsNullOrEmpty(entityIdParameterName))
                {
                    var parameters = invocation.Method.GetParameters();
                    for (int i = 0; i < parameters.Length; i++)
                    {
                        var parameterInfo = parameters[i];
                        if (parameterInfo.Name == entityIdParameterName)
                        {
                            audit.EntityId = (int)invocation.Arguments[i];
                        }
                    }
                }
            }

            result = invocation.Proceed();

            var auditContext = AuditContextManager.Context;

            if (!auditContext.Cancelled)
            {
                if (AuditContextManager.Context != null && auditContext.ContextData.Count > 0)
                {
                    if (audit == null)
                    {
                        audit = GetNewAudit();
                    }
                    var contextData = auditContext.ContextData[0];
                    UpdateAudit(audit, contextData);
                    if (contextData.Action != default(ActionsEnum))
                    {
                        actionType = contextData.Action;
                    }
                    if (contextData.EntityType != null)
                    {
                        type = contextData.EntityType;
                    }
                }

                Audits.Put(audit);

                if (AuditContextManager.Context != null && auditContext.ContextData.Count > 1)
                {
                    for (int i = 1; i < auditContext.ContextData.Count; i++)
                    {
                        var contextData = auditContext.ContextData[i];
                        var extraAudit  = new Audit(AuthenticationProvider.GetLoggedUser());
                        extraAudit.Date = audit.Date;
                        UpdateAudit(extraAudit, contextData);
                        Audits.Put(extraAudit);
                    }
                }
            }

            if (actionType.HasValue && type != null &&
                AuditContextManager.Context != null && auditContext.ContextData.Count > 0 &&
                auditContext.ContextData[0].Displayable != null)
            {
                if (actionType == ActionsEnum.Create)
                {
                    NotificationService.SendCreatedNotificationFor(type, auditContext.ContextData[0].Displayable.ToDisplay());
                }

                if (actionType == ActionsEnum.Edit)
                {
                    NotificationService.SendUpdatedNotificationFor(type, auditContext.ContextData[0].Displayable.ToDisplay(), audit.EntityId);
                }

                if (actionType == ActionsEnum.Delete)
                {
                    NotificationService.SendDeletedNotificationFor(type, auditContext.ContextData[0].Displayable.ToDisplay(), audit.EntityId);
                }
            }

            return(result);
        }