IdentityUser 上的 AuditIgnore - Audit.Net
AuditIgnore on IdentityUser - Audit.Net
我正在使用 Audit.Net 来跟踪更改。很好的图书馆
通过使用Audit.EntityFramework扩展,我们可以忽略要跟踪的属性。
public class User
{
public int Id { get; set; }
[AuditIgnore]
public string Password { get; set; }
...
}
但是我有问题
- 我没有使用
Audit.EntityFramework
扩展程序。只需使用我自己的自定义数据提供程序获取 json 格式。所以[AuditIgnore]
不能在这里工作。
- 如何忽略
IdentityUser
class 上的 password property
?
这是我的自定义数据提供程序
public class MyCustomDataProvider : AuditDataProvider
{
public override object InsertEvent(AuditEvent auditEvent)
{
var AuditEventInJson = auditEvent.ToJson();
//Save into to DB;
}
}
ToJson()
方法将在内部使用 JSON.NET 库来序列化事件,并将使用静态 属性 Audit.Core.Configuration.JsonSettings
中的默认设置
所以如果你可以更改包含密码的class的代码,你可以使用JsonIgnore
属性:
public class User
{
[JsonIgnore]
public string Password { get; set; }
...
}
或者,如果您不能装饰 属性,您可以创建一个自定义 Contract Resolver 来忽略一般属性,例如忽略任何名为 "Password" 的 属性:
class MyCustomResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
var props = base.CreateProperties(type, memberSerialization);
return props.Where(p => p.PropertyName != "Password").ToList();
}
}
为了使用 Audit.NET ToJson()
方法,您需要在 Audit.NET 全局配置上设置合约解析器,如下所示:
Audit.Core.Configuration.JsonSettings.ContractResolver = new MyCustomResolver();
第三个选项是附加一个 Custom Action 以在事件保存发生之前删除要忽略的属性,例如:
Audit.Core.Configuration.AddCustomAction(ActionType.OnEventSaving, scope =>
{
var efEvent = scope.Event.GetEntityFrameworkEvent();
efEvent.Entries.ForEach(e =>
{
e.Changes.RemoveAll(ch => ch.ColumnName == "Password");
});
});
我正在使用 Audit.Net 来跟踪更改。很好的图书馆
通过使用Audit.EntityFramework扩展,我们可以忽略要跟踪的属性。
public class User
{
public int Id { get; set; }
[AuditIgnore]
public string Password { get; set; }
...
}
但是我有问题
- 我没有使用
Audit.EntityFramework
扩展程序。只需使用我自己的自定义数据提供程序获取 json 格式。所以[AuditIgnore]
不能在这里工作。 - 如何忽略
IdentityUser
class 上的password property
?
这是我的自定义数据提供程序
public class MyCustomDataProvider : AuditDataProvider
{
public override object InsertEvent(AuditEvent auditEvent)
{
var AuditEventInJson = auditEvent.ToJson();
//Save into to DB;
}
}
ToJson()
方法将在内部使用 JSON.NET 库来序列化事件,并将使用静态 属性 Audit.Core.Configuration.JsonSettings
所以如果你可以更改包含密码的class的代码,你可以使用JsonIgnore
属性:
public class User
{
[JsonIgnore]
public string Password { get; set; }
...
}
或者,如果您不能装饰 属性,您可以创建一个自定义 Contract Resolver 来忽略一般属性,例如忽略任何名为 "Password" 的 属性:
class MyCustomResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
var props = base.CreateProperties(type, memberSerialization);
return props.Where(p => p.PropertyName != "Password").ToList();
}
}
为了使用 Audit.NET ToJson()
方法,您需要在 Audit.NET 全局配置上设置合约解析器,如下所示:
Audit.Core.Configuration.JsonSettings.ContractResolver = new MyCustomResolver();
第三个选项是附加一个 Custom Action 以在事件保存发生之前删除要忽略的属性,例如:
Audit.Core.Configuration.AddCustomAction(ActionType.OnEventSaving, scope =>
{
var efEvent = scope.Event.GetEntityFrameworkEvent();
efEvent.Entries.ForEach(e =>
{
e.Changes.RemoveAll(ch => ch.ColumnName == "Password");
});
});