Come richiedere l’authorization all’interno dell’intera applicazione ASP .NET MVC

Creo un’applicazione in cui ogni azione oltre a quelle che consentono l’accesso dovrebbe essere fuori dai limiti per l’utente non registrato.

Dovrei aggiungere l’annotazione [Authorize] prima del titolo di ogni class? Come qui:

 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(); } } } 

o c’è una scorciatoia per questo? Cosa succede se voglio cambiare le regole per una sola azione in un particolare controller?

Il modo più semplice è quello di aggiungere l’attributo Authorize nella configurazione del filtro per applicarlo a ogni controller.

 public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); //Add this line filters.Add(new AuthorizeAttribute()); } } 

Un altro modo è quello di avere tutti i controllori che ereditano da una class base. Questo è qualcosa che faccio spesso perché c’è quasi sempre un codice condiviso che tutti i miei controller possono usare:

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

E ora invece di ereditare dal Controller , tutti i controller dovrebbero ereditare questa nuova class:

 public class MySecureController : BaseSecuredController { } 

Nota: non dimenticare di aggiungere l’attributo AllowAnonymous quando è necessario che sia accessibile agli utenti non registrati.

Per DavidG la risposta di DavidG , se è necessario richiedere un determinato ruolo ( Windows authentication , ad esempio, in cui tutti sono autorizzati), è ansible farlo:

 public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" }); } }