我可以使用[授权(角色=“角色”)]属性为每个角色执行自定义重定向吗?

时间:2015-08-28 08:11:01

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

我遇到了几个问题,但似乎没有一个问题符合我的问题:Thisthis

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

我需要根据授权的角色重定向到特定的观看次数。

实施例

[Authorize(Role = "Admin")]

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

[Authorize(Role = "User")]

如果可能,请向我提供解决方案。

感谢。

2 个答案:

答案 0 :(得分: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")]

答案 1 :(得分:1)

在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中获取当前用户的角色,并根据该角色编写重定向逻辑。

相关问题