我遇到了几个问题,但似乎没有一个问题符合我的问题:This和this。
虽然这些问题确实准确地描述了创建自定义授权属性(因此无需在任何可能的答案中完成),我的问题更进一步:
我需要根据授权的角色重定向到特定的观看次数。)
[Authorize(Role = "Admin")]
需要重定向到不同的视图而不是:
[Authorize(Role = "User")]
如果可能,请向我提供解决方案。
感谢。
答案 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中获取当前用户的角色,并根据该角色编写重定向逻辑。