2015-03-17 1 views
0

Est-il possible avec MVC d'autoriser l'accès à l'ensemble du contrôleur par 1 rôle à l'exception de l'accès à un ou plusieurs modes par un autre rôle?Accès par rôles au niveau du contrôleur

Lorsque toutes les méthodes appartiennent au personnel à l'exception de l'accès peut y avoir Méthode 3 par les clients et le personnel. Quelque chose comme ci-dessous:

[Authorize(Roles = "staff")] 
    public class StaffController : Controller 
    { 
     public StaffController() 
     { 
     } 
     public ActionResult Method1() 
     { 
     } 
     public ActionResult Method2() 
     { 
     } 
     [Authorize(Roles = "staff, customer")] 
     public ActionResult Method3() 
     { 
     } 
    } 

Ou un autre scénario où tous font partie du personnel, sauf pour où il est Méthode 3 exclusivement accessible par les clients, comme ci-dessous:

[Authorize(Roles = "staff")] 
    public class StaffController : Controller 
    { 
     public StaffController() 
     { 
     } 
     public ActionResult Method1() 
     { 
     } 
     public ActionResult Method2() 
     { 
     } 
     [Authorize(Roles = "customer")] 
     public ActionResult Method3() 
     { 
     } 
    } 

Cependant, ce qui précède ne fonctionnent pas. Dans les deux cas, les clients n'ont toujours pas accès à Method3.

Appréciez toute aide!

Répondre

0

je soupçonne qu'il vérifie l'autorisation du contrôleur premier, donc jamais obtient une chance de vérifier les actions spécifiques pour leur autorisation.

Une solution est d'autoriser les deux rôles, au niveau de la classe, et restreindre l'accès à des méthodes spécifiques à un peu staff.

par exemple.

[Authorize(Roles="staff,customer")] 
public class StaffController : Controller 
{ 
    [Authorize(Roles="staff")] 
    public StaffController() 
    { 
    } 
    [Authorize(Roles="staff")] 
    public ActionResult Method1() 
    { 
    } 
    [Authorize(Roles="staff")] 
    public ActionResult Method2() 
    { 
    } 
    public ActionResult Method3() 
    { 
    } 
} 

Une autre option est de Restrict (à savoir l'opposé de Authorize) en utilisant quelque chose comme l'attribut personnalisé sur cette réponse ASP.NET MVC: Opposite of [Authorise] mais comme ils mentionnent ce va à l'encontre du principe de la sécurité MVC « refuser par défaut ».