代码之家  ›  专栏  ›  技术社区  ›  mattruma

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

  •  5
  • mattruma  · 技术社区  · 16 年前

    我有以下代码:

        [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));
            }
        }
    

    如果当前登录的用户是 在administrators角色中,它将引导他们返回登录屏幕。用户是 已经 登录后,它们不会被授权执行请求的操作。

    是否有任何方法可以将它们重定向到特定视图,例如,accessdenied?

    1 回复  |  直到 16 年前
        1
  •  5
  •   LukLed    16 年前

    您可以定义自己的属性:

    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" }
                 });
             }
        }
    }
    

    使用

    [AcceptVerbs(HttpVerbs.Post), MyAuthorize(Roles = RoleKeys.Administrators)]