我目前正在为我的网络应用设置权限。并非所有人都需要访问某些页面,例如创建/编辑/删除(通常)或向用户添加新权限。我的数据库中有一个表,用于跟踪用户及其角色/权限。我重写了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"] }
});
}
这让我得到了他们试图访问的动作/控制器,我能够从他们来自哪里?
答案 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()在每个单独的视图中完成它,但我正在寻找可以在一个地方完成的事情,如果可能的话不调整其他视图。如果没有,请发送到通用页面,说明他们未获得授权。