2009-12-21 110 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);