Это поведение по умолчанию атрибута [Authorize]
. Таким образом, вы можете выборочно декорировать действия контроллера, требующие авторизации, по этому атрибуту:
[Authorize]
public ActionResult SomeAction()
{
...
}
И если вы хотите применить его к нескольким действиям, вы можете написать базовый контроллер, а затем украсить этот базовый контроллер заданным атрибутом. Тогда все дочерние контроллеры, производные от этого базового контроллера и все действия, будут требовать авторизации для доступа.
У вас также есть возможность написать собственный атрибут авторизации на основе ваших конкретных требований. Например:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return httpContext.Session["UserId"] != null;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
// if the user doesn't have the userid value in session
// redirect him to the index action on the home controller
var values = new { controller = "Home", action = "Index" };
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(values));
}
}
затем декорируйте действия / контроллеры, которые должны следовать этой пользовательской логике авторизации, с помощью этого атрибута:
[MyAuthorize]
public ActionResult SomeAction()
{
...
}
Теперь, когда вы аутентифицируете пользователя в действии входа в систему (которое, очевидно, не должно быть украшено каким-либо атрибутом authoraztion), при наличии действительных учетных данных вы добавляете свойство UserId в сеанс и перенаправляете на какое-то другое действие контроллера, которое само по себе украшен этим атрибутом и требует аутентификации.
Однако для большинства случаев достаточно атрибута Authorize по умолчанию.