2011-05-27 2 views
2

Nous utilisons MVC3 avec validation unobstructuve, tout va bien; nous avons obtenu nos validations personnalisées sur le serveur ainsi que sur le client.MVC3 Validation basée sur le rôle des utilisateurs

Nous utilisons également le build-in asp.net Fournisseur de rôle. Nous avons des vues particulières que nous utilisons pour différents rôles. Certains des champs (propriétés du ViewModel) sont requis en fonction du rôle de l'utilisateur connecté.

Ma question est: Comment pouvons-nous faire un ValidationAttribute basé sur un rôle? Nous voulons faire une propriété requise lorsque l'utilisateur est un utilisateur normal; mais nous ne voulons pas que ce champ soit requis lorsque l'utilisateur est administrateur. Mais nous voulons utiliser la même vue.

Je sais que nous pouvons créer une coutume ValidationAttribute (création d'une classe qui dérive de ValidationAttribute) Je suppose que cela fonctionnera bien pour la validation côté serveur. Mais nous voulons vraiment valider ce côté client.

Je pense que nous mettons en œuvre la IClientValidatable dans notre ci-dessus ValidationAttribute et écrire une jQuery pour faire un appel Ajax au serveur pour vérifier l'utilisateur connecté actuel utilisateur et ses rôles. Mais cela nous obligera à faire un appel Ajax chaque fois que la propriété spécifique change, et l'utilisateur connecté ne changera pas.

Quelle est la bonne façon de procéder? Ou devrions-nous créer différents ViewModels pour différents utilisateur connecté?

S'il vous plaît laissez-moi savoir quand mon explication ci-dessus n'a pas de sens, je peux ajouter un exemple de code en cas de besoin.

Toute aide est appréciée.

Merci,

Pim

Répondre

0

Je pense que vous pouvez en effet mettre en œuvre un ValidationAttribute de mesure qui met également en œuvre le IClientValidatable. Mais alors vous pouvez « réutiliser » la validation requise discrète pour le côté client:

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
     { 
      if (<your condition, e.g. if user has a certain role>) 
       yield return new ModelClientValidationRequiredRule(<error message>); 
     } 

Cela devrait générer les mêmes attributs discrets requis sur l'entrée comme RequiredAttribute, mais seulement si votre condition est remplie.

+0

Merci! C'était exactement ce que je recherchais. – Pim

Questions connexes