2009-12-21 8 views
3

나는 내 자신의 Authorize 속성을 구현했으며, [Authorize]을 사용할 때 권한을 확인하기 위해 쿼리한다는 것을 알았습니다.특성 승인 권한을 얻으시겠습니까?

컨트롤러에서 코드를 다시 작성하고 다시 쿼리 할 필요없이 해당 권한을 가져 와서 Authorize 특성을 적용하는 현재 컨트롤러에서 사용할 수 있습니까?

답변

3

예, 가능합니다. 당신은 ActionFilterAttribute로 권한 부여 속성을 구현하는 경우는 다음과 같이 정보를 저장을 ViewData 수집을 사용할 수 있습니다

public class RequireRegistrationActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpRequestBase request = filterContext.HttpContext.Request; 
     HttpResponseBase response = filterContext.HttpContext.Response; 

     if (request != null && 
      response != null) 
     { 
      bool isAuthenticated = request.IsAuthenticated; 
      filterContext.Controller.ViewData["IsAuthenticated"] = isAuthenticated; 

      if (!isAuthenticated) 
      { 
       string url = String.Format(
        "/?ReturnUrl={0}", 
        HttpUtility.UrlEncode(request.Url.ToString())); 
       response.Redirect(url); 
      } 
     } 
    } 
} 

를 anoteated 컨트롤러의 acrion에서 당신이 필드에 액세스 할 수 있습니다

bool isAuthenticated = (bool)(ViewData["IsAuthenticated"] ?? false); 
관련 문제