개별 사용자 계정 인증 모드를 사용하는 새 ASP.NET MVC 5 프로젝트에서 액세스 거부 오류 페이지를 구현하려고합니다. 나는 ErrorController.cs
ASP.NET MVC 5 권한 부여 요청 처리
public class ErrorController : Controller
{
public ActionResult AccessDenied()
{
return View();
}
}
및 AccessDenied.cshtml
보기 다음 HomeController.cs
[CustomAuthorize]
public class HomeController : Controller
0에 적용
<h2>Access Denied</h2>
<p>You do not have access to view this page</p>
를 추가 AuthorizeAttribute
public class CustomAuthorize : AuthorizeAttribute
{
protected virtual CustomPrincipal CurrentUser
{
get { return HttpContext.Current.User as CustomPrincipal; }
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAuthenticated)
{
if (!string.IsNullOrEmpty(Roles))
{
if (!CurrentUser.IsInRole(Roles))
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
//base.OnAuthorization(filterContext); // returns to login url
}
}
if (!string.IsNullOrEmpty(Users))
{
if (!Users.Contains(CurrentUser.UserName))
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
//base.OnAuthorization(filterContext); // returns to login url
}
}
}
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
}
}
}
에서 상속 CustomAuthorize
클래스를 추가
하지만 항상 로그인 페이지로 리디렉션됩니다. 액세스 거부 페이지를 표시하는 방법은 무엇입니까?
가 인증 리디렉션 않는 사용자와 역할에 사용자가 없기 때문에
회원 가입 및 로그인, 당신은 거부 페이지에 액세스 리디렉션거야 소개 링크를 클릭하십시오 잘? – takemyoxygen
@takemyoxygen 가능하지만 AccessDenied 페이지로 리디렉션해야합니다 – Willy
개별 사용자 계정으로 mvc 5 템플릿에서 테스트 했으므로 CustomAuthorize 또는 Error 컨트롤러에 아무런 문제가 없음을 확인할 수 있습니다. 내 대답을 확인해. – DSR