web-dev-qa-db-fra.com

Comment exiger une autorisation dans l'ensemble ASP .NET MVC application

Je crée une application où chaque action à côté de celles qui permettent la connexion doit être hors limites pour les utilisateurs non connectés.

Dois-je ajouter [Authorize] annotation avant le titre de chaque classe? Comme ici:

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

ou il y a un raccourci pour cela? Que se passe-t-il si je souhaite modifier les règles d'une seule action dans un contrôleur particulier?

25
Yoda

La manière la plus simple est d'ajouter l'attribut Authorize dans la configuration du filtre pour l'appliquer à chaque contrôleur.

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

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

Une autre façon consiste à faire hériter tous vos contrôleurs d'une classe de base. C'est quelque chose que je fais souvent car il y a presque toujours du code partagé que tous mes contrôleurs peuvent utiliser:

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

Et maintenant, au lieu d'hériter de Controller, tous vos contrôleurs devraient hériter de cette nouvelle classe:

public class MySecureController : BaseSecuredController
{
}

Remarque: N'oubliez pas d'ajouter l'attribut AllowAnonymous lorsque vous en avez besoin pour qu'il soit accessible aux utilisateurs non connectés.

41
DavidG

Pour s'appuyer sur la réponse de DavidG, si vous devez exiger un certain rôle (dans Windows authentication, par exemple, où tout le monde est autorisé), vous pouvez le faire:

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

        filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" });
    }
}
11
Serj Sagan