【问题标题】:MVC Reroute to action when user isn't authorized当用户未获得授权时,MVC 重新路由到操作
【发布时间】:2015-07-25 04:04:43
【问题描述】:

我目前正在为我的网络应用程序设置权限。并非每个人都需要访问某些页面,例如创建/编辑/删除(通常)或向用户添加新权限。我的数据库中有一个表,用于跟踪用户及其角色/权限。我正在覆盖 AuthorizeAttribute。我想要发生的是,当用户无权访问某个页面时,他们将被重定向回他们刚才所在的页面,并显示一个警报显示他们无权访问。

示例:如果他们在主页上并单击“添加新内容”按钮,如果他们没有权限,他们将被引导回主页并显示错误。

为了完成这项工作,我需要访问以前的操作/控制器名称,因为上一页可能永远不会相同。

当前自定义的 AuthorizeAttribute HandleUnauthorizedRequest 方法

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
    filterContext.Result = new RedirectToRouteResult(
                                new RouteValueDictionary {
                                    { "action", filterContext.RouteData.Values["action"] },
                                    { "controller", filterContext.RouteData.Values["controller"] }
                                });
}

这让我得到了他们试图访问的动作/控制器,我能知道他们从哪里来吗?

【问题讨论】:

  • 我相信你最好的选择是Referer(原文如此)标题。
  • @klings 你能详细说明一下吗?
  • Result = new RedirectResult(filterContext.HttpContext.Request.UrlReferrer)
  • 请求中的 referrer 标头包含用户被引用到当前 URL 的 URL。请注意,它可能并不总是设置,一些用户可能出于隐私原因将其浏览器配置为不包含它。
  • 谢谢!当我有你的时候,你知道我怎么做弹出窗口吗?我知道我可以在每个视图中使用 javascript 做到这一点,但有没有一种全局方法可以做到这一点?

标签: asp.net-mvc authorize-attribute


【解决方案1】:

使用 Klings 和 Stephen.vakil 我的建议:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
    Uri requestUrl = filterContext.HttpContext.Request.UrlReferrer;
    if (requestUrl != null)
    {
        filterContext.Result = new RedirectResult(requestUrl.ToString());
    }
    else
    {
        filterContext.Result = new RedirectToRouteResult(
                                    new RouteValueDictionary {
                                        { "action", "NotAuthorized" },
                                        { "controller", "Admin" }
                                    });
    }
}

如果有推荐人,则将他们带回该页面,但当他们到达该页面时,我仍然需要一个弹出窗口。我知道它可以在每个单独的视图中使用 javascript 和 alert() 来完成,但我正在寻找可以在一个地方完成的事情,如果可能的话,无需调整其他视图。如果没有,请发送到一个通用页面,说明他们未获得授权。

【讨论】:

    猜你喜欢
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多