2011-09-28 149 views
0

我正在考慮編寫自定義授權屬性,我不確定輸出緩存。 屬性應該是這樣的:AuthorizeAttribute和輸出緩存在asp.net mvc 3

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; } 
} 

我有以下從專業書asp.net的MVC報價:

所以,如果你把用[的OutputCache]的授權過濾器,會發生什麼?在最糟糕的情況下,您會冒着授權用戶首先訪問您的操作並導致其運行並被緩存的風險,不久後 後面是未經授權的用戶,即使他們未經授權也可獲得緩存輸出。 幸運的是,ASP.NET MVC團隊已經預料到了這個問題,並且已經爲AuthorizeAttribute添加了特殊的邏輯,以使其在ASP.NET輸出緩存中發揮出色。當輸出緩存模塊將要從 緩存中提供響應時,它使用一個鮮爲人知的輸出緩存 API來註冊自身。這可以防止未經授權的用戶獲取緩存內容。

看完這個之後,我仍然不清楚 - 我應該做一些關於緩存的事情。

回答

1

不,你會沒事的。 AuthorizeAttribute將始終使用。輸出緩存可能會緩存授權用戶的內容,但不會將其顯示給未經授權的用戶,反之亦然。

+0

但它可能會將授權用戶的數據顯示給其他授權用戶! – SepehrM