2011-08-24 51 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 - 尤其是“示例方案”) 。

相关问题