2011-08-24 33 views
0
public class AdministratorAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      EFUserRepository repo = new EFUserRepository(); 
      var user = repo.FindUserByUserName(filterContext.HttpContext.User.Identity.Name); 
      if (user.UserRole.Name == "Administrator") 
      { 
       filterContext.Result = new RedirectToRouteResult(//Redirect to the original action they tried to enter? 
      } 
     } 
     else 
     { 
      //redirect to the "Home/Index" area. 
     } 
    } 
} 

我在重定向到此OnActionExecuting方法中的操作時遇到問題。另外,如果用戶獲得完全授權,我將如何將用戶重定向到他們原來的預期行動。在實現ActionFilterAttribute的類中重定向

[Administrator]屬性將被放置在許多不同的控制器,所以我必須有一種方法來重定向到他們試圖達到適當的ActionResult。

+0

你不能使用'Authorize'屬性嗎? '[Authorize(Roles =「Administrator」)]'? – Chris

+0

我有我自己的自定義會員系統。 –

回答

0

通常的做法是,對於至少一個GET,對所請求的url進行url編碼幷包含它。例如,所以如果我們開始this question爲匿名,並點擊登錄,我們被帶到

https://stackoverflow.com/users/login?returnurl=%2fquestions%2f7182675%2fredirecting-in-a-class-that-implements-the-actionfilterattribute 

同爲重定向會工作;一旦完成登錄,請檢查returnurl參數,然後退出。

你應該,但是,檢查目標網址可能是相對(同一站點),或絕對的當前網站或其他網站你自己的/ etc(see OWASP for details - 尤其是「示例方案」) 。

相關問題