ABP官方文档翻译 4.6 审计日志

Posted RAINAI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABP官方文档翻译 4.6 审计日志相关的知识,希望对你有一定的参考价值。

审计日志

介绍

  维基百科:“审计追踪(也称为审计日志)是与安全相关的按时间先后的记录、记录集合、记录的目的地和源,提供一系列活动的纪实证据,这些活动可能在任何时刻影响一个特定操作、过程或事件。”

  ABP提供了基础设施自动记录应用所有的交互。它可以记录方法调用的调用者和参数。

  基本上,保存的字段有:相关的tenant id,调用者user id,调用者service name(调用方法的类),调用者method name,执行parameters(序列化为JSON),执行时间,执行时长(毫秒级),客户端IP地址,客户端计算机名称异常(如果方法抛出异常)。

  有了这些信息,我们就可以知道谁执行了这个操作,也可以衡量应用的执行性能和检查抛出的异常。还可以得到你的应用的使用统计。

  审计系统使用IAbpSession获得当前的UserId和TenantId。

  应用服务、MVC控制器、Web APID和ASP.NET Core方法默认自动审计。

关于IAuditingStore

  审计系统使用IAuditingStore保存审计信息。你可以用自己的方式来实现这个接口,但在module-zero工程中已完全实现。如果你没实现它,可以使用SimpleLogAuditingStore,它会把审计信息写到日志中。

配置

  要配置审计,可以在模块的PreInitialize方法中使用Configuration.Auditing属性。审计默认是启用的。可以按如下的方式禁用:

public class MyModule : AbpModule
{
    public override void PreInitialize()
    {
        Configuration.Auditing.IsEnabled = false;
    }

    //...
}

  这里有审计配置属性的列表:

  • IsEnabled:用来完全启用或禁用审计系统。默认为:true。
  • IsEnabledForAnoymousUsers:如果设置为true,对那些没有登录到系统的用户也会保存审计日志。默认为:false。
  • Selectors:用来选择其他类保存审计日志。

  Selectors是一个术语列表用来选择其他类型保存审计日志。一个selector有一个唯一的名称和一个术语。默在这个列表中唯一的默认selector用来选择应用服务类。它的定义如下所示:

Configuration.Auditing.Selectors.Add(
    new NamedTypeSelector(
        "Abp.ApplicationServices",
        type => typeof (IApplicationService).IsAssignableFrom(type)
    )
);

  可以在模块的PreInitialize方法中添加selectors。如果你不喜欢应用服务保存审计日志,可以通过名称移除selector。这就是有一个唯一名称的原因(如果你想的话,可以使用简单的LINQ在selectors中查找selector并移除它)。

  注意:除了标准的审计配置,MVC和ASP.NET Core模块定义了配置来启用或禁用方法的审计日志。

通过特性启用/禁用

  你可以通过配置,选择需要审计的类,你也可以给一个类、方法使用Audited和DisableAuditing特性来达到目的。示例:

[Audited]
public class MyClass
{
    public void MyMethod1(int a)
    {
        //...
    }

    [DisableAuditing]
    public void MyMethod2(string b)
    {
        //...
    }

    public void MyMethod3(int a, int b)
    {
        //...
    }
}

  MyClass的所有方法都会被审计,除了MyMethod2,因为它显示禁用了。Audited特性可以用于一个方法,这样就可以只给想要审计的方法进行审计了。

  DisableAuditing可以用于DTO的一个属性。因此,你可以在审计日志里隐藏敏感输入,如密码。

注意事项

  • 为了保存设计日志,方法必须为public。Private和Protected方法会被忽略。
  • 如果通过类引用调用,方法必须为virtual。如果使用它的接口(如注入IPersonService接口来使用PersonService类)注入,这就不要了。因为ABP使用动态代理和来接,所以这是需要的。对于MVC控制器方法,这不是真的。他们不能为virtual。

 

返回主目录

以上是关于ABP官方文档翻译 4.6 审计日志的主要内容,如果未能解决你的问题,请参考以下文章

ABP官方文档翻译 3.1 实体

ABP官方文档翻译 1.2 N层架构

ABP官方文档翻译 7.2 Hangfire集成

ABP官方文档翻译 10.1 ABP Nuget包

ABP官方文档翻译 9.3 NHibernate集成

ABP官方文档翻译 4.4 授权