Как требуется авторизация в рамках всего приложения ASP.NET MVC
Я создаю приложение, где каждое действие рядом с теми, которые разрешают вход в систему, должно быть вне пределов для не зарегистрированного пользователя.
Должен ли я добавлять аннотацию [Authorize]
перед заголовком каждого класса? Как здесь:
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();
}
}
}
или есть ярлык для этого? Что делать, если я хочу изменить правила для одного и единственного действия в конкретном контроллере?
Ответы
Ответ 1
Самый простой способ - добавить атрибут Authorize
в конфигурацию фильтра, чтобы применить его к каждому контроллеру.
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
//Add this line
filters.Add(new AuthorizeAttribute());
}
}
Другим способом является использование всех ваших контроллеров, наследуемых от базового класса. Это то, что я часто делаю, так как почти всегда есть общий код, который могут использовать все мои контроллеры:
[Authorize]
public abstract class BaseSecuredController : Controller
{
//Various methods can go here
}
И теперь вместо наследования от Controller
все ваши контроллеры должны наследовать этот новый класс:
public class MySecureController : BaseSecuredController
{
}
Примечание. Не забудьте добавить атрибут AllowAnonymous
, когда вам нужно, чтобы он был доступен для пользователей без регистрации.
Ответ 2
Чтобы построить ответ DavidG
, если вам нужно потребовать определенную роль (в Windows authentication
, например, когда все разрешены), вы можете сделать это:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" });
}
}