gpt4 book ai didi

c# - 如何使用 Audit.Net 扩展 Audit.Mvc 设置 AuditEvent 的目标对象

转载 作者:行者123 更新时间:2023-11-30 17:27:06 27 4
gpt4 key购买 nike

我必须将审计添加到我没有编码的系统中,并且在编程时也没有考虑审计。

然后我遇到了 Audit.Net,这是一个多么棒的框架!

我也在使用 Audit.Mvc 扩展。

无论如何,我想在 HomeController 中添加一个 Target 对象到 AuditEvent 对象。我有这个:

[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{...
var auditScope = this.GetCurrentAuditScope();
...
}

如何将 leaveRequest 作为目标添加到 auditScope 的 AuditEvent?

最佳答案

在当前版本中,Target 对象只能在 AuditScope 分配。创建,使用 Audit.Mvc 时您无法控制扩展名。

当然你可以像这样手动:

[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{
SetTargetObject(leaveRequest);

// ... I guess here the leaveRequest object is modified
leaveRequest.SomeProp = "NewValue";

UpdateTargetObject(leaveRequest);
}

private void SetTargetObject(object value)
{
var scope = this.GetCurrentAuditScope();
scope.Event.Target = new AuditTarget
{
SerializedOld = scope.DataProvider.Serialize(value),
Type = value.GetType().Name
};
}

private void UpdateTargetObject(object value)
{
var scope = this.GetCurrentAuditScope();
scope.Event.Target.SerializedNew = scope.DataProvider.Serialize(value);
}

我将在下一个版本的库中提供一种重新分配 Target Getter 的方法(真的很快),因此可以简化这种用例。

但是如果你只需要一个版本的leaveRequest对象,你可以只使用 Custom Field :

[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{
this.GetCurrentAuditScope().SetCustomField("LeaveRequest", leaveRequest);

// ...

}

更新

从版本 14.2.1 开始,该库公开了一个 SetTargetGetter(Func<object>) AuditScope 上的方法更新目标 getter(返回目标对象以供审核的函数)。

所以第一个例子现在可以简化为:

[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{
this.GetCurrentAuditScope().SetTargetGetter(() => leaveRequest);

// ...
leaveRequest.SomeProp = "NewValue";
}

关于c# - 如何使用 Audit.Net 扩展 Audit.Mvc 设置 AuditEvent 的目标对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55532387/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com