授权失败时将用户重定向到特定视图?

mat*_*uma 5 security asp.net-mvc

我有以下代码:

    [AcceptVerbs(HttpVerbs.Post), Authorize(Roles = RoleKeys.Administrators)]
    public ActionResult Edit(int id, FormCollection collection)
    {
        User user = userRepository.GetUser(id);

        try
        {
            this.UpdateModel(user);

            userRepository.Save();

            return this.RedirectToAction("Details", new { id = user.UserId });
        }
        catch
        {
            this.ModelState.AddModelErrors(user.GetRuleViolations());

            return View(new UserFormViewModel(user));
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果当前登录的用户不是管理员角色,则会将其踢回登录屏幕.用户登录,他们只是未授权执行请求的操作.

有没有办法让它们重定向到特定的视图,例如,AccessDenied?

Luk*_*Led 5

您可以定义自己的属性:

public class MyAuthorizeAttribute: AuthorizeAttribute
{
    public override void OnAuthorization( AuthorizationContext filterContext )
    {
         base.OnAuthorization(filterContext);
         if (filterContext.Result is HttpUnauthorizedResult)
         {
             filterContext.Result = new RedirectToRouteResult(
             new RouteValueDictionary
             {
                 { "controller", "Login" },
                 { "action", "AccessDenied" }
             });
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用

[AcceptVerbs(HttpVerbs.Post), MyAuthorize(Roles = RoleKeys.Administrators)]
Run Code Online (Sandbox Code Playgroud)