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

审计日志

  • 介绍

    • 关于IAuditingStore
  • 配置
  • 通过特性启用/禁用
  • 注意事项

介绍

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

  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。

返回主目录

时间: 2024-08-02 02:38:29

ABP官方文档翻译 4.6 审计日志的相关文章

ABP官方文档翻译 6.2.1 ASP.NET Core集成

ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Action过滤器 异常过滤器 结果过滤器 Ajax请求的结果缓存 模型绑定器 视图 客户端代理 集成测试 介绍 本文档描述了ABP如何集成ASP.NET Core.ASP.NET Core通过Abp.AspNetCore nuget包实现集成. 迁移到ASP.NET Core? 如果你已经有一个工程并考虑

ABP官方文档翻译 5.1 Web API控制器

ASP.NET Web API控制器 介绍 AbpApiController基类 本地化 其他 过滤器 审计日志 授权 反伪造过滤器 工作单元 结果包装和异常处理 结果缓存 校验 模型绑定器 介绍 ABP通过Abp.Web.Api nuget包集成到ASP.NET Web API控制器.你可以按照往常一样创建ASP.NET Web API控制器.依赖注入系统可以用于一般的ApiControllers.但是,建议继承AbpApiController,它提供了许多好处并且能够更好的与ABP集成. A

ABP官方文档翻译 10.1 ABP Nuget包

ABP Nuget包 Packages Abp Abp.AspNetCore Abp.Web.Common Abp.Web Abp.Web.Mvc Abp.Web.Api Abp.Web.Api.OData Abp.Web.Resources Abp.Web.SignalR Abp.Owin Abp.EntityFramework.Common Abp.EntityFramework Abp.EntityFramework.GraphDiff Abp.EntityFrameworkCore Ab

ABP官方文档翻译 7.3 Quartz集成

Quartz集成 介绍 安装 创建Jobs 计划安排Jobs 更多 介绍 Quartz是一个全功能的.开源的job计划安排系统,可以用在小的apps也可以用于大型的企业系统.Abp.Quartz包简化了ABP集成Quartz. ABP有內建的持久化后台job队列和后台worker系统.如果对于后台workers你有更高级的计划安排需求,Quartz会是一个更好的选择.对于持久化后台job队列,Hangfire也是一个好的选择. 安装 在工程中安装Abp.Quartz nuget包并在模块上为Ab

ABP官方文档翻译 4.1 应用服务

应用服务 IApplicationService接口 ApplicationService类 CrudService和AsyncCrudAppService类 简单的CRUD应用服务示例 自定义CRUD应用服务 GettingList Create和Update 其他方法参数 CRUD权限 工作单元 应用服务生命周期 应用服务将领域逻辑暴露给展示层.在展示层使用DTO(数据传输对象)作为参数调用应用服务,应用服务使用领域对象执行一些特定的业务逻辑,并返回DTO到展示层.因此,展示层与领域层是完全

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

N层架构 介绍 ABP架构 其他(通用) 领域层 应用层 基础设施层 网络和展现层 其他 总结 介绍 应用程序代码库的分层架构是被广泛认可的可以减少程序复杂度.提高代码复用率的技术.为了实现分层架构,ABP遵循领域驱动设计的原则.在领域驱动设计中有四个基本层: 表现层:提供用户接口.使用应用层实现用户交互. 应用层:桥接表现层和领域层.协调业务对象来执行特定的应用任务. 领域层:包括业务对象以及业务规则.此层是整个应用的核心. 基础设施层:提供通用的技术能力来支持高层.基础设施层可以是使用ORM

ABP官方文档翻译 3.1 实体

实体 实体类 聚合根类 领域事件 常规接口 审计 软删除 激活/失活实体 实体改变事件 IEntity接口 实体是DDD(领域驱动设计)的核心概念之一.Eric Evans描述它为"An object that is not fundamentally defined by its attributes, but rather by a thread of continuity and identity."所以,实体有Id并存储在数据库.实体一般映射到关系库中的表. 实体类 在ABP,

ABP官方文档翻译 7.1 后台Jobs和Workers

后台Jobs和Workers 介绍 后台Jobs 关于Job持久化 创建后台Job 在队列中添加一个新Job 默认的后台Job管理器 后台Job存储 配置 禁用Job执行 异常处理 Hangfire集成 后台Workers 创建后台Workers 注册后台Workers 后台Worker生命周期 高级计划安排 让你的应用一直运行 介绍 ABP提供了后台jobs和workers,他们用于在应用的后台线程中执行一些任务. 后台Jobs 后台Jobs用来排队一些需要在后台队列或持久化的方式执行一些任务

ABP官方文档翻译 6.4 导航

导航 创建菜单 注册导航提供者 显示菜单 每一个网络应用都会有一些菜单用来在pages/screens之间导航.ABP提供了通用的基础设施来创建并显示菜单. 创建菜单 应用可以由不同的模块组成,每一个模块都有自己的菜单项.为了定义菜单项,我们需要创建一个继承自NavigationProvider的类. 假定,我们有一个如下所示的主菜单: Tasks Reports Administration User management Role management 这里,Administration菜单