在我的MVC 5应用程序中,我应用了一些角色过滤器,例如:
[Authorize(Roles = "ManageRoles")]
现在,如果用户无权访问此角色,则会将我重定向到登录页面。这在我的应用程序中是不正确的,因为我想显示一条错误消息,说明您没有权限访问。
如果用户无权访问过滤器,我该如何更改会发生什么?
我是否必须实施自定义过滤器?我想尽可能尝试使用redirectTo操作,这样我就可以在不同的情况下使用不同的错误页面。
答案 0 :(得分:1)
使用自定义授权Attribure - Ben Scheirman or Ben Cull's answer in this thread。
同时检查Mark's response to similar question,他使用HandleUnauthorizedRequest
重定向未经授权的用户。
在上述两种方法中,您可以重定向到您感兴趣的任何路径或操作,并使用HttpContent.Items []或TempData来保存要在目标页面上显示的特定错误消息或值。
答案 1 :(得分:1)
MVC5实际上已经开始解决这个问题。除授权过滤器外,它们现在还包括身份验证过滤器。这些都是非常简单的记录,但我的直觉是,这是第一次将身份验证与授权分离(直到现在,ASP.NET已经将这两者混为一谈)
我的想法是,身份验证过滤器将用于控制用户是否登录,并且将使用授权过滤器来控制您有权访问的内容。但是,这似乎还没有完全实现。
答案 2 :(得分:0)
在Login
视图中,您可以为:
由于您将通过Web.config
设置自动重定向到登录页面,因此您可以利用此机制。
if (!Request.IsAuthenticated)
{
//render login form
}
else
{
<p>Error: you do not have the necessary credentials to access this resource.</p>
}
另一种选择是创建自己的AuthorizationAttribute
。 This question与您的相似。你可能会发现它很有用。