Расширение AuditedAttribute для замены или маскирования проверенных значений - PullRequest
0 голосов
/ 25 октября 2018

Я использую ABP версии 3.8.2.Я включил Журнал аудита ABP , и он работает нормально.

Можно ли заменить или замаскировать значение журнала аудита другим значением, чтобы скрыть конфиденциальную информацию, такую ​​как пароль, данные кредитной карты, так далее.?Возможно, расширив атрибут Audited ABP.

Пожалуйста, предложите.

1 Ответ

0 голосов
/ 28 октября 2018

Да, вы можете заменить или замаскировать проверенные значения, чтобы скрыть конфиденциальную информацию.

  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);
        }
    }
    
  2. Реализация 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;
        }
    }
    
  3. Реализация MaskedValueProvider:

    public class MaskedValueProvider : IValueProvider
    {
        public object GetValue(object target)
        {
            return "***";
        }
    
        public void SetValue(object target, object value)
        {
            throw new NotImplementedException();
        }
    }
    
  4. Реализация MaskedAuditedAttributeнаследуя AuditedAttribute:

    public class MaskedAuditedAttribute : AuditedAttribute
    {
    }
    

Использование

public class LoginViewModel
{
    [MaskedAudited]
    public string Password { get; set; }

    // ...
}
...