Расширение AuditedAttribute для замены или маскирования проверенных значений
Я использую ABP версии 3.8.2. Я включил ведение журнала аудита ABP, и он работает нормально.
Можно ли каким-либо образом заменить или замаскировать значение журнала аудита другим значением, чтобы скрыть конфиденциальную информацию, такую как пароль, данные кредитной карты и т. Д.? Может быть, путем расширения атрибута Audited ABP.
Пожалуйста, предложите.
1 ответ
Решение
Да, вы можете заменить или замаскировать проверенные значения, чтобы скрыть конфиденциальную информацию.
Воплощать в жизнь
MaskableAuditSerializer
:public class MaskableAuditSerializer : IAuditSerializer, ITransientDependency { private readonly IAuditingConfiguration _configuration; public MaskableJsonNetAuditSerializer(IAuditingConfiguration configuration) { _configuration = configuration; } public string Serialize(object obj) { var options = new JsonSerializerSettings { ContractResolver = new MaskableAuditingContractResolver(_configuration.IgnoredTypes) }; return JsonConvert.SerializeObject(obj, options); } }
Воплощать в жизнь
MaskableAuditingContractResolver
наследуяAuditingContractResolver
:public class MaskableAuditingContractResolver : AuditingContractResolver { public MaskableAuditingContractResolver(List<Type> ignoredTypes) : base(ignoredTypes) { } protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { var property = base.CreateProperty(member, memberSerialization); if (member.IsDefined(typeof(MaskedAuditedAttribute))) { property.ValueProvider = new MaskedValueProvider(); } return property; } }
Воплощать в жизнь
MaskedValueProvider
:public class MaskedValueProvider : IValueProvider { public object GetValue(object target) { return "***"; } public void SetValue(object target, object value) { throw new NotImplementedException(); } }
Воплощать в жизнь
MaskedAuditedAttribute
наследуяAuditedAttribute
:public class MaskedAuditedAttribute : AuditedAttribute { }
использование
public class LoginViewModel
{
[MaskedAudited]
public string Password { get; set; }
// ...
}