2 votes

Est-il possible de rendre l'attribut de la propriété du modèle obligatoire pour des rôles spécifiques dans Asp.Net MVC ?

Est-il possible de rendre obligatoire le champ de modèle sur l'anotation de données pour les seuls rôles spécifiés ?

Par exemple :

[Display(Name = "Kurum")]
[Required(ErrorMessage = "Kurum Alanı Girişi Zorunludur.",Roles="user")]
public decimal? KurumKodu { get; set; }

Je sais qu'il n'y a pas de paramètre comme Required(Roles="xxxx") mais je me demande s'il existe une autre solution à ce problème ?

Merci.

1voto

Power Star Points 1205

Vous devez créer un attribut de validation personnalisé pour cela. Le code ci-dessous peut vous aider à le faire.

      public class RequiredIfAttribute : RequiredAttribute
        {
            private string PropertyName { get; set; }
            private object DesiredValue { get; set; }

            public RequiredIfAttribute(string propertyName, object desiredvalue)
            {
                PropertyName = propertyName;
                DesiredValue = desiredvalue;
            }

            protected override ValidationResult IsValid(object value, ValidationContext context)
            {
                object instance = context.ObjectInstance;
                Type type = instance.GetType();
                Object proprtyvalue = type.GetProperty(PropertyName).GetValue(instance, null);
                if (proprtyvalue.ToString() == DesiredValue.ToString())
                {
                    ValidationResult result = base.IsValid(value, context);
                    return result;
                }
                return ValidationResult.Success;
            }
        }

Ensuite, vous devez décorer votre propriété avec cet attribut (lire les commentaires dans le code pour comprendre)

        public class User
        {
            /// <summary>
            /// Gets or Sets Usertype.
            /// </summary>
            public string UserType { get; set; }

            /// <summary>
            /// Gets or Sets KurumKodu.
            /// Here "Usertype" is property. In that you have to assign current user's role.
            /// "user" is constant role. If  "UserType" has value as "user" then this will be required.
            /// </summary>
            [RequiredIf("UserType", "user", ErrorMessage = "It is required")]
            public decimal KurumKodu { get; set; }
        }

Si vous souhaitez ajouter la validation côté client (discrète), veuillez consulter le lien ci-dessous.

Attribut de validation conditionnelle RequiredIf

0voto

Vincent Nabet Points 58

Vous pouvez utiliser

HttpContext.Current.User.IsInRole("USER_ROLE")

dans votre classe d'attributs de validation personnalisée

-2voto

Hadee Points 1144

J'ai essayé différentes approches, mais je suis arrivé à la conclusion que le meilleur endroit pour le faire, c'est à la vue. Quelque chose comme :

 @if (User.IsInRole("SystemAdministrator"))
    {
     <td>@Html.DisplayFor(model => model.KurumKodu)</td>
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X