2011-09-28 7 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