У меня есть требование применять разные значения минимальной длины в функции смены пароля к новому паролю, создаваемому на основе ролей пользователя. Если у пользователя нет административных ролей, минимальная длина составляет 12, если у них есть роли администратора, минимальная длина составляет 16.
Текущий код не имеет такой логики требований к переменным. Реализация нового свойства пароля была такой же в классе модели с именем ChangePasswordData:
///summary>
/// Gets and sets the new Password.
/// </summary>
[Display(Order = 3, Name = "NewPasswordLabel", ResourceType = typeof(UserResources))]
[Required]
[PasswordSpecialChar]
[PasswordMinLower]
[PasswordMinUpper]
[PasswordMaxLength]
[PasswordMinLength]
[PasswordMinNumber]
public string NewPassword { get; set; }
Атрибут проверки устанавливается следующим образом:
/// <summary>
/// Validates Password meets minimum length.
/// </summary>
public class PasswordMinLength : ValidationAttribute
{
public int MinLength { get; set; }
public bool IsAdmin { get; set; }
public PasswordMinLength()
{
// Set this here so we override the default from the Framework
this.ErrorMessage = ValidationErrorResources.ValidationErrorBadPasswordLength;
//Set the default Min Length
this.MinLength = 12;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null || !(value is string) || !UserRules.PasswordMinLengthRule(value.ToString(), this.MinLength))
{
return new ValidationResult(this.ErrorMessageString, new string[] { validationContext.MemberName });
}
return ValidationResult.Success;
}
}
Я хочу иметь возможность установить значение MinLength на 12 или 16 в зависимости от значения IsAdmin, однако я не могу понять, как украсить атрибут [PasswordMinLength(IsAdmin=myvarable)]. Допускаются только константы. Как я могу ввести значение свойства в ValidationAttribute, которое я могу оценить, чтобы определить правильную минимальную длину?
Спасибо!