Skip to content

Commit f2fa4e5

Browse files
committed
feat: 新增 审计实体模型
1 parent e17989a commit f2fa4e5

File tree

9 files changed

+372
-8
lines changed

9 files changed

+372
-8
lines changed

common.props

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222
<DocumentationFile>$(AssemblyName).xml</DocumentationFile>
2323
</PropertyGroup>
2424

25+
<ItemGroup>
26+
<!--移除Xml、DotSettings-->
27+
<None Remove="$(AssemblyName).xml" />
28+
<None Remove="$(AssemblyName).csproj.DotSettings" />
29+
</ItemGroup>
30+
2531
<Import Project="asset/props/target.feature.props"/>
2632

2733
<Import Project="asset/props/sourcelink.env.props"/>

framework/src/Bing.AspNetCore/Bing/AspNetCore/Cors/AllowCorsRequestMiddleware.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System.Threading.Tasks;
2-
using Microsoft.AspNetCore.Http;
1+
using Microsoft.AspNetCore.Http;
32

43
namespace Bing.AspNetCore.Cors;
54

framework/src/Bing.AspNetCore/Bing/AspNetCore/DependencyInjection/HttpContextServiceScopeFactory.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System;
2-
using Bing.DependencyInjection;
1+
using Bing.DependencyInjection;
32
using Microsoft.AspNetCore.Http;
43
using Microsoft.Extensions.DependencyInjection;
54

@@ -68,4 +67,4 @@ public void Dispose()
6867
{
6968
}
7069
}
71-
}
70+
}

framework/src/Bing.AspNetCore/Bing/AspNetCore/ExceptionHandling/IHttpExceptionStatusCodeFinder.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System;
2-
using System.Net;
1+
using System.Net;
32
using Microsoft.AspNetCore.Http;
43

54
namespace Bing.AspNetCore.ExceptionHandling;
@@ -15,4 +14,4 @@ public interface IHttpExceptionStatusCodeFinder
1514
/// <param name="httpContext">Http上下文</param>
1615
/// <param name="exception">异常</param>
1716
HttpStatusCode GetStatusCode(HttpContext httpContext, Exception exception);
18-
}
17+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using Bing.Data.ObjectExtending;
2+
3+
namespace Bing.Auditing;
4+
5+
/// <summary>
6+
/// 审计日志 - 操作信息
7+
/// </summary>
8+
/// <remarks>一个审计日志操作通常是WEB请求期间控制器操作或应用服务方法调用,一个审计日志可以包含多个操作。</remarks>
9+
[Serializable]
10+
public class AuditLogActionInfo : IHasExtraProperties
11+
{
12+
/// <summary>
13+
/// 服务名称
14+
/// </summary>
15+
/// <remarks>执行的控制器/服务的名称。</remarks>
16+
public string ServiceName { get; set; }
17+
18+
/// <summary>
19+
/// 方法名称
20+
/// </summary>
21+
/// <remarks>控制器/服务执行的方法的名称</remarks>
22+
public string MethodName { get; set; }
23+
24+
/// <summary>
25+
/// 参数
26+
/// </summary>
27+
/// <remarks>传递给方法的参数的JSON格式化文本。</remarks>
28+
public string Parameters { get; set; }
29+
30+
/// <summary>
31+
/// 执行时间
32+
/// </summary>
33+
public DateTime ExecutionTime { get; set; }
34+
35+
/// <summary>
36+
/// 执行持续时间
37+
/// </summary>
38+
/// <remarks>方法执行时长,以毫秒为单位,可以用来观察方法的性能。</remarks>
39+
public int ExecutionDuration { get; set; }
40+
}
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
using System.Text;
2+
using Bing.Data.ObjectExtending;
3+
4+
namespace Bing.Auditing;
5+
6+
/// <summary>
7+
/// 审计日志信息
8+
/// </summary>
9+
[Serializable]
10+
public class AuditLogInfo : IHasExtraProperties
11+
{
12+
/// <summary>
13+
/// 初始化一个<see cref="AuditLogInfo"/>类型的实例
14+
/// </summary>
15+
public AuditLogInfo()
16+
{
17+
Actions = new List<AuditLogActionInfo>();
18+
Exceptions = new List<Exception>();
19+
EntityChanges = new List<EntityChangeInfo>();
20+
Comments = new List<string>();
21+
}
22+
23+
/// <summary>
24+
/// 应用程序名称
25+
/// </summary>
26+
/// <remarks>当你保存不同的应用审计日志到同一个数据库时,这个属性用来区分应用程序。</remarks>
27+
public string ApplicationName { get; set; }
28+
29+
/// <summary>
30+
/// 用户ID
31+
/// </summary>
32+
/// <remarks>当前用户的ID,用户未登录为<c>null</c>。</remarks>
33+
public string UserId { get; set; }
34+
35+
/// <summary>
36+
/// 用户名
37+
/// </summary>
38+
/// <remarks>当前用户的用户名,如果用户已经登录</remarks>
39+
public string UserName { get; set; }
40+
41+
/// <summary>
42+
/// 租户ID
43+
/// </summary>
44+
/// <remarks>当前租户的ID,对于多租户应用。</remarks>
45+
public string TenantId { get; set; }
46+
47+
/// <summary>
48+
/// 租户名称
49+
/// </summary>
50+
/// <remarks>当前的租户的名称,对于多租户应用。</remarks>
51+
public string TenantName { get; set; }
52+
53+
/// <summary>
54+
/// 模仿用户ID
55+
/// </summary>
56+
public string ImpersonatorUserId { get; set; }
57+
58+
/// <summary>
59+
/// 模仿租户ID
60+
/// </summary>
61+
public string ImpersonatorTenantId { get; set; }
62+
63+
/// <summary>
64+
/// 模仿用户名
65+
/// </summary>
66+
public string ImpersonatorUserName { get; set; }
67+
68+
/// <summary>
69+
/// 模仿租户名
70+
/// </summary>
71+
public string ImpersonatorTenantName { get; set; }
72+
73+
/// <summary>
74+
/// 执行时间
75+
/// </summary>
76+
/// <remarks>审计日志对象创建的时间。</remarks>
77+
public DateTime ExecutionTime { get; set; }
78+
79+
/// <summary>
80+
/// 执行持续时间
81+
/// </summary>
82+
/// <remarks>请求的总执行时间,以毫秒为单位,可以用来观察应用程序的性能。</remarks>
83+
public int ExecutionDuration { get; set; }
84+
85+
/// <summary>
86+
/// 客户端ID
87+
/// </summary>
88+
/// <remarks>当前客户端的ID,如果客户端已经通过认证,客户端通常是使用HTTP API的第三方应用程序。</remarks>
89+
public string ClientId { get; set; }
90+
91+
/// <summary>
92+
/// 客户端名称
93+
/// </summary>
94+
/// <remarks>当前客户端的名称,如果有的话。</remarks>
95+
public string ClientName { get; set; }
96+
97+
/// <summary>
98+
/// 客户端IP地址
99+
/// </summary>
100+
/// <remarks>客户端/用户设备的IP地址。</remarks>
101+
public string ClientIpAddress { get; set; }
102+
103+
/// <summary>
104+
/// 关联ID
105+
/// </summary>
106+
/// <remarks>当前关联ID,关联ID用于在单个逻辑操作中关联由不同应用程序(或微服务)写入的审计日志。</remarks>
107+
public string CorrelationId { get; set; }
108+
109+
/// <summary>
110+
/// 浏览器信息
111+
/// </summary>
112+
/// <remarks>当前用户的浏览器名称/版本信息,如果有的话。</remarks>
113+
public string BrowserInfo { get; set; }
114+
115+
/// <summary>
116+
/// HTTP方法
117+
/// </summary>
118+
/// <remarks>当前HTTP请求的方法(GET,POST,PUT,DELETE...等)。</remarks>
119+
public string HttpMethod { get; set; }
120+
121+
/// <summary>
122+
/// HTTP状态码
123+
/// </summary>
124+
/// <remarks>HTTP响应状态码。</remarks>
125+
public int? HttpStatusCode { get; set; }
126+
127+
/// <summary>
128+
/// 网址
129+
/// </summary>
130+
/// <remarks>请求的URL。</remarks>
131+
public string Url { get; set; }
132+
133+
/// <summary>
134+
/// 操作信息日志列表
135+
/// </summary>
136+
/// <remarks>一个审计日志操作通常是WEB请求期间控制器操作或应用服务方法调用,一个审计日志可以包含多个操作。</remarks>
137+
public List<AuditLogActionInfo> Actions { get; set; }
138+
139+
/// <summary>
140+
/// 异常列表
141+
/// </summary>
142+
/// <remarks>审计日志对象可能包含零个或多个异常,可以得到失败请求的异常信息。</remarks>
143+
public List<Exception> Exceptions { get; set; }
144+
145+
/// <summary>
146+
/// 实体变更信息列表
147+
/// </summary>
148+
public List<EntityChangeInfo> EntityChanges { get; set; }
149+
150+
/// <summary>
151+
/// 注释列表
152+
/// </summary>
153+
/// <remarks>用于将自定义消息添加到审计日志条目的任意字符串值。审计日志对象可能包含零个或多个注释。</remarks>
154+
public List<string> Comments { get; set; }
155+
156+
/// <summary>
157+
/// 输出字符串
158+
/// </summary>
159+
public override string ToString()
160+
{
161+
var sb = new StringBuilder();
162+
sb.AppendLine($"AUDIT LOG: [{HttpStatusCode?.ToString() ?? "---"}: {(HttpMethod ?? "-------"),-7}] {Url}");
163+
sb.AppendLine($"- UserName - UserId : {UserName} - {UserId}");
164+
sb.AppendLine($"- ClientIpAddress : {ClientIpAddress}");
165+
sb.AppendLine($"- ExecutionDuration : {ExecutionDuration}");
166+
167+
if (Actions.Any())
168+
{
169+
sb.AppendLine("- Actions:");
170+
foreach (var action in Actions)
171+
{
172+
sb.AppendLine($" - {action.ServiceName}.{action.MethodName} ({action.ExecutionDuration} ms.)");
173+
sb.AppendLine($" {action.Parameters}");
174+
}
175+
}
176+
177+
if (Exceptions.Any())
178+
{
179+
sb.AppendLine("- Exceptions:");
180+
foreach (var exception in Exceptions)
181+
{
182+
sb.AppendLine($" - {exception.Message}");
183+
sb.AppendLine($" {exception}");
184+
}
185+
}
186+
187+
if (EntityChanges.Any())
188+
{
189+
sb.AppendLine("- Entity Changes:");
190+
foreach (var entityChange in EntityChanges)
191+
{
192+
sb.AppendLine($" - [{entityChange.ChangeType}] {entityChange.EntityTypeFullName}, Id = {entityChange.EntityId}");
193+
foreach (var propertyChange in entityChange.PropertyChanges)
194+
{
195+
sb.AppendLine($" {propertyChange.PropertyName}: {propertyChange.OriginalValue} -> {propertyChange.NewValue}");
196+
}
197+
}
198+
}
199+
return sb.ToString();
200+
}
201+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using Bing.Data.ObjectExtending;
2+
3+
namespace Bing.Auditing;
4+
5+
/// <summary>
6+
/// 实体变更信息
7+
/// </summary>
8+
[Serializable]
9+
public class EntityChangeInfo : IHasExtraProperties
10+
{
11+
/// <summary>
12+
/// 变更时间
13+
/// </summary>
14+
/// <remarks>当实体被改变的时间。</remarks>
15+
public DateTime ChangeTime { get; set; }
16+
17+
/// <summary>
18+
/// 变更类型
19+
/// </summary>
20+
public EntityChangeInfo ChangeType { get; set; }
21+
22+
/// <summary>
23+
/// 实体租户ID
24+
/// </summary>
25+
/// <remarks>实体所属的租户ID。</remarks>
26+
public string EntityTenantId { get; set; }
27+
28+
/// <summary>
29+
/// 实体ID
30+
/// </summary>
31+
/// <remarks>变更实体的ID</remarks>
32+
public string EntityId { get; set; }
33+
34+
/// <summary>
35+
/// 实体类型全名称
36+
/// </summary>
37+
/// <remarks>实体类型的完整命名空间。</remarks>
38+
public string EntityTypeFullName { get; set; }
39+
40+
/// <summary>
41+
/// 实体变更属性列表
42+
/// </summary>
43+
public List<EntityPropertyChangeInfo> PropertyChanges { get; set; }
44+
45+
/// <summary>
46+
/// 合并
47+
/// </summary>
48+
/// <param name="changeInfo">实体变更信息</param>
49+
public virtual void Merge(EntityChangeInfo changeInfo)
50+
{
51+
foreach (var propertyChange in changeInfo.PropertyChanges)
52+
{
53+
var existingChange = PropertyChanges.FirstOrDefault(p => p.PropertyName == propertyChange.PropertyName);
54+
if (existingChange == null)
55+
PropertyChanges.Add(propertyChange);
56+
else
57+
existingChange.NewValue = propertyChange.NewValue;
58+
}
59+
}
60+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System.ComponentModel;
2+
3+
namespace Bing.Auditing;
4+
5+
/// <summary>
6+
/// 实体变更类型
7+
/// </summary>
8+
public enum EntityChangeType
9+
{
10+
/// <summary>
11+
/// 创建
12+
/// </summary>
13+
[Description("创建")]
14+
Created = 0,
15+
16+
/// <summary>
17+
/// 更新
18+
/// </summary>
19+
[Description("更新")]
20+
Updated = 1,
21+
22+
/// <summary>
23+
/// 删除
24+
/// </summary>
25+
[Description("删除")]
26+
Deleted = 2
27+
}

0 commit comments

Comments
 (0)