当用户未被授权时 MVC 重新路由到操作

MVC Reroute to action when user isn't authorized

我目前正在为我的网络应用程序设置权限。并非每个人都需要访问某些页面,例如 creating/editing/deleting(通常)或为用户添加新权限。我的数据库中有一个 table,用于跟踪用户及其 role/rights。我正在覆盖 AuthorizeAttribute。我希望发生的情况是,当用户未被授权访问页面时,他们将被重定向回他们刚刚所在的页面,并显示一个警告说他们没有访问权限。

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

为了完成这项工作,我需要访问之前的 action/controller 名称,因为之前的页面可能永远不会相同。

当前自定义的 AuthorizeAttribute HandleUnauthorizedRequest 方法

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

这让我得到了他们正在尝试访问的action/controller,我能知道他们来自哪里吗?

使用 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() 完成,但我正在寻找可以在一个地方完成的事情,如果可能的话,无需调整其他视图。如果没有,请发送到通用页面,说明他们未获得授权。