【问题标题】:Can I use [Authorize(Role = "Role")] Attribute to do custom redirects per role?我可以使用 [Authorize(Role = "Role")] 属性为每个角色进行自定义重定向吗?
【发布时间】:2015-08-28 08:11:01
【问题描述】:

我已经解决了几个问题,但似乎没有一个适合我的问题:Thisthis

虽然这些问题确实准确地描述了创建自定义授权属性(因此无需在任何可能的答案中进行讨论),但我的问题更进一步:

我需要根据授权的角色重定向到特定的视图。

示例:

[Authorize(Role = "Admin")]

需要重定向到不同的视图:

[Authorize(Role = "User")]

如果可能的话,请给我一个解决方案。

谢谢。

【问题讨论】:

  • Authorize 属性的目的不是重定向到指定登录页面。我建议您创建一个新的通用操作,然后根据角色将其重定向到指定视图。
  • 好的,我明白了。虽然希望有一些聪明的把戏。谢谢!
  • 大多数时候简单的解决方案是最好的解决方案。我个人尽量保持简单。

标签: c# asp.net asp.net-mvc-5


【解决方案1】:

是的。这是代码。

public class CustomActionAttribute : FilterAttribute, IActionFilter
{
    string _role;
    string _redirect;

    public CustomRedirectFilter(string role, string redirect)
    {
       _role = role;
       _redirect = redirect;
    }
    void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if(CheckDatabaseToCheckUserRole == _role)
        {
             filterContext.Result = new RedirectResult(_redirect);    
        }
    }

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {

    }


}

用法:

[CustomRedirectFilter("Admin","/Admin")]

【讨论】:

  • 支持努力,成功实施后将标记为答案。谢谢。
  • 所以我进行了编辑,因为您还需要实现“OnActionExecuted”。
  • 为什么你同时拥有IActionFilter.OnActionExecutingOnActionExecuted 这太乱了
【解决方案2】:

在 MVC 中,您可以创建自定义授权过滤器并在 HandleUnauthorizedRequest 中进行重定向:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AuthorizeRedirect : AuthorizeAttribute
{
    public string RedirectUrl = "~/Error/Unauthorized";

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        base.HandleUnauthorizedRequest(filterContext);

        if (filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new RedirectResult(RedirectUrl);
        }
    }
}

我认为你从错误的方向看它。您不应该为每个角色使用多个属性,而是在 HandleUnauthorizedRequest 中获取当前用户的角色并基于此编写重定向逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2015-12-29
    相关资源
    最近更新 更多