我有一个使用Visual Studio 2012创建的MVC 4 Intranet应用程序.我使用
WindowsAuthentication并按预期验证用户身份.在某些操作中,我使用“授权”属性将用户限制为某些角色.当用户单击调用用户未授权的控制器操作的链接时,会弹出“需要身份验证”对话框.当我使用没有授权的帐户登录时,它会继续弹出对话框.相反,我想这样:
>当用户无权访问该页面时,按当前方式弹出对话框.
>当用户输入有效但未被授权访问该页面的登录时,重定向到另一个页面,表示禁止访问.
我该怎么做呢?作为相关信息,我使用here讨论的方法定制了角色提供者
最佳答案 为此,您需要自定义授权来自行处理未经授权的情况.
你需要一个像这样的方法:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAuthenticated)
{
filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}