Я думаю написать собственный атрибут авторизации, и я не уверен в кэшировании вывода.Атрибут будет выглядеть так:
public class AuthorizeWithAreasAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.IsInRole(Roles))
{
var urlHelper = new UrlHelper(filterContext.RequestContext);
filterContext.HttpContext.Response.Redirect(urlHelper.Action(ControllerName, ActionName, new { area = AreaName }));
}
base.OnAuthorization(filterContext);
}
public string ControllerName { get; set; }
public string ActionName { get; set; }
public string AreaName { get; set; }
}
У меня есть следующая цитата из книги professional asp.net mvc:
Итак, что произойдет, если вы объедините фильтр авторизации с [OutputCache]?В худшем случае вы рискуете, когда авторизованный пользователь сначала посетит ваше действие, что приведет к его выполнению и кешированию, за которым вскоре следует неавторизованный пользователь, который получает кешированный вывод, даже если он не авторизован.К счастью, команда ASP.NET MVC предвидела эту проблему и добавила специальную логику в AuthorizeAttribute, чтобы он хорошо работал с кэшированием вывода ASP.NET.Он использует малоизвестный API выходного кэширования, чтобы зарегистрировать себя для запуска, когда модуль выходного кэширования собирается обработать ответ из кэша.Это не позволяет неавторизованным пользователям получать кэшированный контент.
После прочтения этого мне остается неясным - следует ли мне что-то делать с кэшированием.