当用户未获得授权时,MVC重新启动

时间:2015-07-24 17:33:48

标签: asp.net-mvc authorize-attribute

我目前正在为我的网络应用设置权限。并非所有人都需要访问某些页面,例如创建/编辑/删除(通常)或向用户添加新权限。我的数据库中有一个表,用于跟踪用户及其角色/权限。我重写了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"] }
                                });
}

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

1 个答案:

答案 0 :(得分:0)

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