c# - IdentityUser 上的 AuditIgnore - Audit.Net
问题描述
我正在使用Audit.Net来跟踪更改。非常好的库
通过使用Audit.EntityFramework扩展,我们可以忽略要跟踪的属性。
public class User
{
public int Id { get; set; }
[AuditIgnore]
public string Password { get; set; }
...
}
但我有问题
- 我没有使用
Audit.EntityFramework
扩展名。只需使用我自己的自定义数据提供程序获取 json 格式。所以[AuditIgnore]
不能在这里工作。 - 如何忽略课堂
password property
上的IdentityUser
?
这是我的自定义数据提供者
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
因此,如果您可以更改包含密码的类的代码,则可以使用该JsonIgnore
属性:
public class User
{
[JsonIgnore]
public string Password { get; set; }
...
}
或者,如果您无法装饰属性,则可以创建自定义合同解析器以一般忽略属性,例如忽略任何名为“密码”的属性:
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.NETToJson()
方法,您需要在 Audit.NET 全局配置上设置合约解析器,如下所示:
Audit.Core.Configuration.JsonSettings.ContractResolver = new MyCustomResolver();
第三种选择是附加一个自定义操作以在事件保存发生之前删除要忽略的属性,例如:
Audit.Core.Configuration.AddCustomAction(ActionType.OnEventSaving, scope =>
{
var efEvent = scope.Event.GetEntityFrameworkEvent();
efEvent.Entries.ForEach(e =>
{
e.Changes.RemoveAll(ch => ch.ColumnName == "Password");
});
});
推荐阅读
- azure-devops - spawnSync 错误,并且无法使用 azure-pipeline 的 ContainerStructureTest@0 任务找到 loc 字符串警告
- python - 如何合并多个csv文件并将数据复制到现有的txt文件中
- .htaccess - 主页 + 来自 GET 参数的重定向值
- python - “类别”对象没有属性“post_set”
- python - 如何在 Django admin 中输入一定数量的条目后限制管理员输入?
- security - 如何配置 kubernetes 以便我可以从笔记本电脑向主机发出命令?
- python - 为什么第一个结果没有出现在文件中?
- javascript - 与 Node 反应,从 res.status.json() 获取 json 数据
- python - 如何获取 Python 中两个列表之间相同匹配项的数量?
- java - 如何从 JButton 内部调用 Swing 计时器