asp.net-mvc - 授权失败时将用户重定向到特定 View ?

标签 asp.net-mvc security

我有以下代码:

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

如果当前登录的用户是 不是 在管理员角色中,它会将他们踢回登录屏幕。用户是 已经登录后,他们只是无权执行请求的操作。

有什么方法可以让它们重定向到特定 View ,例如 AccessDenied?

最佳答案

您可以定义自己的属性:

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)]

关于asp.net-mvc - 授权失败时将用户重定向到特定 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698389/

相关文章:

c# - ASP.NET MVC 在创建对象时读取属性

JavaScript 事件,不更新 knockout 可观察/模型值

jquery - CDN 交付 jQuery 的安全性如何?

amazon-web-services - 如何为多个用户管理 EC2 key 对?

reactjs - CloudFlare JS挑战打破了我的SPA

jquery - 如何用另一个 Ajax.ActionLink 替换(或更新)一个 Ajax.ActionLink?

asp.net-mvc - 到达/访问 MVC 中 IEnumerable 对象中的特定索引

asp.net - 选择 Model 还是 BLL/DAL/BO 层?

javascript - 在 JavaScript 中依赖全局 native 对象(尤其是 Object 对象)是否安全?

javascript - 混合内容奇怪的 https 问题与 https iframe