private bool ShouldSaveAudit(HttpActionContext context)
        {
            if (!_auditingConfiguration.IsEnabled)
            {
                return(false);
            }

            if (context.ActionDescriptor.IsDynamicAbpAction())
            {
                return(false);
            }

            return(AuditingHelper.ShouldSaveAudit(
                       context.ActionDescriptor.GetMethodInfoOrNull(),
                       _auditingConfiguration,
                       AbpSession,
                       true
                       ));
        }
예제 #2
0
        /// <summary>
        /// Initializes the view model.
        /// </summary>
        protected ViewModelBase()
        {
            if (CatelEnvironment.IsInDesignMode)
            {
                return;
            }

            UniqueIdentifier          = UniqueIdentifierHelper.GetUniqueIdentifier(GetType());
            ViewModelConstructionTime = DateTime.Now;

            AuditingHelper.RegisterViewModel(this);

            _viewModelCommandManager = ViewModelCommandManager.Create(this);
            _viewModelCommandManager.AddHandler(async(viewModel, propertyName, command, commandParameter) =>
            {
                _catelCommandExecuted.SafeInvoke(this, () => new CommandExecutedEventArgs((ICatelCommand)command, commandParameter, propertyName));
            });

            ViewModelManager.RegisterViewModelInstance(this);
        }
예제 #3
0
        public void OnActionExecuting(ActionExecutingContext context)
        {
            IServiceProvider provider = context.HttpContext.RequestServices;
            IFunction        function = context.GetExecuteFunction();

            if (function == null)
            {
                return;
            }
            ScopedDictionary dict = provider.GetService <ScopedDictionary>();

            dict.Function = function;
            // 数据权限有效角色,即有当前功能权限的角色
            IFunctionAuthorization functionAuthorization = provider.GetService <IFunctionAuthorization>();
            ClaimsPrincipal        principal             = context.HttpContext.User;

            string[] roleName = functionAuthorization.GetOkRoles(function, principal);
            dict.DataAuthValidRoleNames = roleName;
            IAuditingConfiguration configuration = provider.GetRequiredService <IAuditingConfiguration>();

            if (!AuditingHelper.ShouldSaveAudit(configuration, principal, function, context.ActionDescriptor.GetMethodInfo()))
            {
                return;
            }
            AuditOperationEntry operation = new AuditOperationEntry
            {
                FunctionName    = function.Name,
                ClientIpAddress = context.HttpContext.GetClientIp(),
                UserAgent       = context.HttpContext.Request.Headers["User-Agent"].FirstOrDefault(),
                CreatedTime     = DateTime.Now
            };

            if (principal.Identity.IsAuthenticated && principal.Identity is ClaimsIdentity identity)
            {
                operation.UserId   = identity.GetUserId();
                operation.UserName = identity.GetUserName();
                operation.NickName = identity.GetNickName();
            }

            dict.AuditOperation = operation;
        }
예제 #4
0
        /// <summary>
        /// Initializes the view model.
        /// </summary>
        protected ViewModelBase()
        {
            if (Catel.Environment.IsInDesignMode)
            {
                return;
            }

            UniqueIdentifier          = UniqueIdentifierHelper.GetUniqueIdentifier(GetType());
            ViewModelConstructionTime = DateTime.Now;

            AuditingHelper.RegisterViewModel(this);

            _viewModelCommandManager = ViewModelCommandManager.Create(this);
            _viewModelCommandManager.AddHandler((viewModel, propertyName, command, commandParameter) =>
                                                _catelCommandExecuted.SafeInvoke(this, new CommandExecutedEventArgs((ICatelCommand)command, commandParameter, propertyName)));

            ServiceLocator     = IoCConfiguration.DefaultServiceLocator;
            DependencyResolver = ServiceLocator.ResolveType <IDependencyResolver>();
            RegisterViewModelServices(ServiceLocator);

            ViewModelManager.RegisterViewModelInstance(this);
        }
예제 #5
0
        protected virtual bool ShouldSaveEntityHistory(EntityEntry entityEntry, bool defaultValue = false)
        {
            if (entityEntry.State == EntityState.Detached ||
                entityEntry.State == EntityState.Unchanged)
            {
                return(false);
            }

            var entityType = entityEntry.Metadata.ClrType;

            if (!EntityHelper.IsEntity(entityType))
            {
                return(false);
            }

            if (AuditingHelper.IsEntityHistoryEnabled(entityType))
            {
                return(true);
            }

            return(defaultValue);
        }
예제 #6
0
        private bool ShouldSaveAudit(ActionExecutingContext filterContext)
        {
            if (AuditingConfiguration == null)
            {
                return(false);
            }

            if (!AuditingConfiguration.MvcControllers.IsEnabled)
            {
                return(false);
            }

            if (filterContext.IsChildAction && !AuditingConfiguration.MvcControllers.IsEnabledForChildActions)
            {
                return(false);
            }

            return(AuditingHelper.ShouldSaveAudit(
                       GetMethodInfo(filterContext.ActionDescriptor),
                       AuditingConfiguration,
                       AbpSession,
                       true
                       ));
        }
예제 #7
0
 /// <summary>
 /// Constructs the step
 /// </summary>
 public OutgoingAuditingStep(AuditingHelper auditingHelper, ITransport transport)
 {
     _auditingHelper = auditingHelper;
     _transport      = transport;
 }
예제 #8
0
 /// <summary>
 /// Constructs the step
 /// </summary>
 public IncomingAuditingStep(AuditingHelper auditingHelper, ITransport transport, IRebusTime rebusTime)
 {
     _auditingHelper = auditingHelper;
     _transport      = transport;
     _rebusTime      = rebusTime;
 }
예제 #9
0
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            IAuditingConfiguration configuration = _provider.GetRequiredService <IAuditingConfiguration>();

            if (!ShouldSaveAudit(context, configuration))
            {
                await next();

                return;
            }

            using (CrossCuttingConcerns.Applying(context.Controller, CrossCuttingConcerns.Auditing))
            {
                IAuditStore store    = _provider.GetService <IAuditStore>();
                IFunction   function = context.GetExecuteFunction();
                //var auditInfo = store.CreateAuditInfo(
                //    context.ActionDescriptor.AsControllerActionDescriptor().ControllerTypeInfo.AsType(),
                //    context.ActionDescriptor.AsControllerActionDescriptor().MethodInfo,
                //    context.ActionArguments
                //);
                Type                type         = context.ActionDescriptor.AsControllerActionDescriptor().ControllerTypeInfo.AsType();
                List <Type>         ignoredTypes = configuration.IgnoredTypes;
                AuditOperationEntry operation    = new AuditOperationEntry
                {
                    FunctionName    = function.Name,
                    ClientIpAddress = context.HttpContext.GetClientIp(),
                    UserAgent       = context.HttpContext.Request.Headers["User-Agent"].FirstOrDefault(),
                    CreatedTime     = DateTime.Now,
                    ServiceName     = type != null
                    ? type.FullName
                    : "",
                    Parameters = ConvertArgumentsToJson(context.ActionArguments, ignoredTypes),
                };
                if (context.HttpContext.User.Identity.IsAuthenticated && context.HttpContext.User.Identity is ClaimsIdentity identity)
                {
                    operation.UserId   = identity.GetUserId();
                    operation.UserName = identity.GetUserName();
                }

                var stopwatch = Stopwatch.StartNew();

                ActionExecutedContext result = null;
                try
                {
                    result = await next();

                    if (result.Exception != null && !result.ExceptionHandled)
                    {
                        operation.Exception = result.Exception;
                    }
                }
                catch (Exception ex)
                {
                    operation.Exception = ex;
                    throw;
                }
                finally
                {
                    stopwatch.Stop();
                    operation.Elapsed = Convert.ToInt32(stopwatch.Elapsed.TotalMilliseconds);

                    if (configuration.SaveReturnValues && result != null)
                    {
                        switch (result.Result)
                        {
                        case ObjectResult objectResult:
                            operation.ReturnValue = AuditingHelper.Serialize(objectResult.Value, ignoredTypes);
                            break;

                        case JsonResult jsonResult:
                            operation.ReturnValue = AuditingHelper.Serialize(jsonResult.Value, ignoredTypes);
                            break;

                        case ContentResult contentResult:
                            operation.ReturnValue = contentResult.Content;
                            break;

                        case AjaxResult ajaxResult:
                            operation.ReturnValue = ajaxResult.Content;
                            break;
                        }
                    }

                    await store.SaveAsync(operation);
                }
            }
        }
예제 #10
0
 private bool ShouldSaveAudit(ActionExecutingContext actionContext, IAuditingConfiguration configuration)
 {
     return(AuditingHelper.ShouldSaveAudit(configuration, actionContext.HttpContext.User, actionContext.GetExecuteFunction(), actionContext.ActionDescriptor.GetMethodInfo()));
 }