src/00_Host/Host.Web/Filters/AuditFilterAttribute.cs

(开头部分) 4KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Castle.Core.Logging;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Mkh.Auth.Abstractions;
using Mkh.Auth.Abstractions.Annotations;
using Mkh.Auth.Abstractions.Options;
using Mkh.Logging.Abstractions.Providers;
using Mkh.Module.Abstractions;
using Mkh.Utils.Json;

namespace Mkh.Host.Web.Filters
{
    /// <summary>
    /// 审计日志
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
    internal class AuditFilterAttribute : AuthorizeAttribute, IAsyncActionFilter
    {
        private readonly IOptionsMonitor<AuthOptions> _authOptions;
        private readonly IAuditLogHandler _logHandler;
        private readonly IAccount _account;
        private readonly JsonHelper _jsonHelper;
        private readonly IModuleCollection _moduleCollection;
        private readonly ILogger<AuditFilterAttribute> _logger;

        public AuditFilterAttribute(IAuditLogHandler logHandler, IOptionsMonitor<AuthOptions> authOptions, IAccount account, JsonHelper jsonHelper, IModuleCollection moduleCollection, ILogger<AuditFilterAttribute> logger)
        {
            _logHandler = logHandler;
            _authOptions = authOptions;
            _account = account;
            _jsonHelper = jsonHelper;
            _moduleCollection = moduleCollection;
            _logger = logger;
        }


        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            //未启用审计日志
            if (!_authOptions.CurrentValue.EnableAuditLog)
            {
                await next();
                return;
            }
            //如果禁用审计功能,直接走下一步
            if (CheckDisabled(context))
            {
                await next();
                return;
            }

            var log = CreateLog(context);

后面还有 77 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。