AuthorizeAttribute и вывод кеширования в asp.net mvc 3 - PullRequest
0 голосов
/ 28 сентября 2011

Я думаю написать собственный атрибут авторизации, и я не уверен в кэшировании вывода.Атрибут будет выглядеть так:

 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 выходного кэширования, чтобы зарегистрировать себя для запуска, когда модуль выходного кэширования собирается обработать ответ из кэша.Это не позволяет неавторизованным пользователям получать кэшированный контент.

После прочтения этого мне остается неясным - следует ли мне что-то делать с кэшированием.

1 Ответ

0 голосов
/ 28 сентября 2011

Нет, ты будешь в порядке. Атрибут AuthorizeAttribute всегда будет использоваться. Кэш вывода может кэшировать контент авторизованного пользователя, но никогда не будет отображать его неавторизованному пользователю, и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...