当用户未被授权时 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() 完成,但我正在寻找可以在一个地方完成的事情,如果可能的话,无需调整其他视图。如果没有,请发送到通用页面,说明他们未获得授权。
我目前正在为我的网络应用程序设置权限。并非每个人都需要访问某些页面,例如 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() 完成,但我正在寻找可以在一个地方完成的事情,如果可能的话,无需调整其他视图。如果没有,请发送到通用页面,说明他们未获得授权。