2010-11-06 3 views
0

J'utilise le code suivant pour le contrôle d'accès dans une application ASP.MVC (ce un morceau d'un contrôleur):Contrôle d'accès dans une application ASP.MVC

public ActionResult MakeEditable(int id) 
{ 
    // controlling part 
    if (!User.Identity.IsAuthenticated) 
    { 
     return RedirectToAction("Login", "User", new { 
      callback = Url.Action("MakeEditable", "Article", new { id = id }) 
     }); 
    } 

    // action's body 
} 

Il est très pratique pour écrire la partie contrôle pour chaque action, donc je cherche le moyen de l'éviter. Si c'était Nemerle, je pourrais utiliser des macros au niveau des attributs, mais pour C#, je pense que la meilleure approche est PostSharp. Quelles sont les autres façons de fournir cette fonctionnalité que vous pourriez conseiller?

Répondre

2

Il existe plusieurs options d'autorisation dans ASP.NET MVC. La façon dont vous faites est en effet très gênant, mais il y a un meilleur moyen! Vous n'avez des macros d'attributs en C# :)

[Authorize] 
public ActionResult DoSomething(int someParam) 
{ 
    //Do stuff here. 
    Return View(); 
} 

Le [Authorize] balise peut être placé directement au-dessus toute action sur un contrôleur ou même au-dessus de la classe de contrôleur lui-même pour rendre le contrôleur ensemble accessible uniquement aux utilisateurs authentifiés . Si vous utilisez le fournisseur d'appartenance et de rôle, vous pouvez même inclure un filtre de rôle dans l'attribut.

[Authorize(Roles="trader")] 
public ActionResult SomeAction(int someParam) 
{ 
    //stuff... 
} 

Il est également possible d'appliquer une autorisation à des routes d'URL entières. Similaire à la façon dont vous souhaitez appliquer l'autorisation au niveau du répertoire dans les formulaires Web ASP.NET traditionnels. Il suffit d'ajouter quelque chose comme ceci à votre web.config:

<location path="Admin"> 
    <system.web> 
      <authorization> 
       <deny users="?"/> 
       <allow roles="SiteAdmin"/> 
       <deny users="*"/> 
      </authorization> 
    </system.web> 
</location> 

Cela dit UrlAuthorizationModule (qui est enregistré pour toutes les applications ASP.NET par défaut) que pour l'URL ~/admin et les URL correspondant ~/admin/*, il doit faire ce qui suit:

• Refuser l'accès pour les visiteurs non authentifiés()

• Autoriser l'accès pour les visiteurs authentifiés dans le rôle SiteAdmin()

• Refuser l'accès à tous les autres visiteurs()

Questions connexes