2014-07-26 1 views
17

Ich erstelle eine Anwendung, bei der jede Aktion neben denen, die die Anmeldung ermöglichen, für nicht angemeldete Benutzer außerhalb der Grenzen sein sollte.Wie die Autorisierung innerhalb der gesamten ASP .NET MVC-Anwendung erforderlich ist

Sollte ich hinzufügen, [Authorize] Annotation vor jeder Überschrift der Klasse? Wie hier:

namespace WebApplication2.Controllers { 
[Authorize] 
    public class HomeController : Controller { 




     public ActionResult Index() { 
      return View(); 
     } 

     public ActionResult About() { 
      ViewBag.Message = "Your application description page."; 

      return View(); 
     } 

     public ActionResult Contact() { 
      ViewBag.Message = "Your contact page."; 

      return View(); 
     } 
    } 
} 

oder gibt es eine Abkürzung dafür? Was ist, wenn ich die Regeln für eine einzige Aktion in einem bestimmten Controller ändern möchte?

+0

Mögliches Duplikat [Kann die \ [Authorize \] - Attribut global für alle Controller gesetzt?] (Https://stackoverflow.com/questions/22597624/can-the-authorize-attribute-be-set-globally-for-all-controllers) – KyleMit

Antwort

28

Der einfachste Weg besteht darin, das Attribut Authorize in der Filterkonfiguration hinzuzufügen, um es auf jeden Controller anzuwenden.

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 

     //Add this line 
     filters.Add(new AuthorizeAttribute()); 
    } 
} 

Eine andere Möglichkeit besteht darin, dass alle Ihre Controller von einer Basisklasse erben. Dies ist etwas, das ich oft tun, wie es fast immer einige gemeinsamen Code, der alle meine Controller verwenden können:

[Authorize] 
public abstract class BaseSecuredController : Controller 
{ 
    //Various methods can go here 
} 

Und nun anstelle von Controller zu erben, die alle Ihre Controller sollten diese neue Klasse erben:

public class MySecureController : BaseSecuredController 
{ 
} 

Hinweis: Vergessen Sie nicht, das Attribut AllowAnonymous hinzuzufügen, wenn Sie es für nicht angemeldete Benutzer benötigen.

9

auf DavidG ‚s Antwort zu erstellen, wenn Sie eine bestimmte Rolle verlangen müssen (in Windows authentication, zum Beispiel, wo jeder berechtigt ist), dies zu tun:

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 

     filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" }); 
    } 
} 
+1

Angeben der Rolle ist eine großartige Ergänzung, genau das, was ich gesucht habe. – Zapnologica

Verwandte Themen