2009-08-29 7 views
27

Comment l'étiquette d'autorisation détermine-t-elle si l'utilisateur est autorisé ou non? Par exemple, si un utilisateur se connecte et essaie d'accéder à une vue dotée d'une balise Authorize. Comment détermine-t-il si un utilisateur est autorisé ou non? Est-ce qu'il fait une requête à la base de données et vérifie?Comment fonctionne le tag Autoriser? - ASP.NET MVC

Que diriez-vous si elles vont à une vue avec une autorisation de rôle? Est-ce qu'il interroge la table des rôles d'appartenance?

Je me demande simplement depuis que j'ai ce que les tables d'adhésion ASP.NET considèrent les userNames en double. J'utilise un sérieux de champs pour déterminer quel utilisateur est quoi, permettant aux utilisateurs d'avoir le même nom d'utilisateur en double, mais toujours être unique dans ma base de données. Cela m'a obligé à écrire des méthodes personnalisées pour beaucoup d'éléments d'appartenance .NET, car tous utilisaient "userName" pour effectuer une recherche au lieu d'utiliser l'UserId.

Je me demande maintenant si cela pourrait être le cas avec la balise Authorize. Comme je n'ai aucune idée de comment cela fonctionne et si je n'utilisais pas l'appartenance à .NET, je n'aurais pas la moindre idée de comment cela pourrait le déterminer.

+0

Je n'ai pas de réponse directe à votre question, mais n'oubliez pas que ASP.NET MVC est open source et vous pouvez le vérifier vous-même. Je suppose que cela demande juste au fournisseur d'adhésion. – JoshJordan

Répondre

24

La balise Authorize utilise tous les contrôles d'appartenance intégrés d'ASP.NET. C'est TRÈS facile de jouer votre propre tag. Par exemple:

public class MyAuthorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext == null) throw new ArgumentNullException("httpContext"); 

     // Make sure the user is authenticated. 
     if (httpContext.User.Identity.IsAuthenticated == false) return false; 

     // Do you own custom stuff here 
     bool allow = CheckIfAllowedToAccessStuff(); 

     return allow; 
    } 
} 

Vous pouvez alors utiliser la balise [MyAuthorize] qui utilisera vos chèques personnalisés.

+0

Comment fonctionne la vérification d'adhésion? Utilise-t-il userName ou UerId? – chobo2

+0

Je ne suis pas sûr à 100% mais je pense principalement à httpContext.User.Identity.IsAuthenticated et retourne la valeur, mais je sais qu'il a également la possibilité de vérifier les rôles. – Kelsey

+0

hmm Je ne sais pas, il semble ne pas fonctionner, je peux toujours voir la page. Il met juste l'URL de retour dans mon URL et c'est à ce sujet. – chobo2

14

ControllerActionInvoker analyse l'attribut et appelle OnAuthorization() lorsqu'il est temps de vérifier les informations d'identification.

La méthode AuthorizationAttribute.OnAuthorization() vérifie essentiellement si User.Identity.IsAuthenticated est vrai ou non. Cela utilise uniquement la fonctionnalité de FormsAuthentication ou tout autre schéma d'authentification que vous utilisez peut-être.

Questions connexes