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?
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.
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" });
}
}