2009-02-19 7 views
0

J'aimerais pouvoir obtenir une méthode fortement typée pour savoir quelle action est en cours d'exécution.Quelle action s'exécute en tant qu'objet fortement typé?

Pour clarifier im faisant AOP où je permets seulement l'accès à une action donnée si l'utilisateur a des droits pour cette action. Le problème avec l'utilisation d'une chaîne pour déterminer quelle règle vérifier, est que si un développeur renomme une action, je ne recevrai pas d'erreur de compilation me disant que ma règle est cassée.

Des idées?

Répondre

1

Développez un attribut qui effectue votre vérification. Appliquez l'attribut, avec toutes les options nécessaires, aux actions que vous souhaitez protéger. Écrire des tests unitaires qui vérifient que les actions en question existent et sont décorées avec votre attribut (avec les bonnes options). Dans votre attribut, vous n'avez pas besoin de savoir quelle action est en cours d'exécution, juste si l'utilisateur actuel réussit les tests configurés par les options de votre attribut.

J'ai quelques attributs différents que j'ai dérivés de AuthorizeAttribute qui font exactement ce genre de chose.

public class RequiresEmailAttribute : AuthorizeAttribute 
{ 
     ... implements the logic to test whether the current user 
     ... has an email address and redirects to error view if no 
     ... email address is found 
} 

[RequiresEmail] 
public ActionResult SendEmail(string to) 
{ 
    .... 
} 
Questions connexes