私の解決策は、eu-ge-neの答えに基づいています。 Mineは、ログインしていないユーザーをログインページに正しくリダイレクトしますが、ログインしていてもそのページを表示する権限がない場合は、アクセス拒否ページにリダイレクトします。
[AccessDeniedAuthorize(Roles="SuperAdmin")]
public class SuperAdminController : Controller
AccessDeniedAuthorizeAttribute.cs:
public class AccessDeniedAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("~/Account/Logon");
return;
}
if (filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Result = new RedirectResult("~/Account/Denied");
}
}
}
AccountController.cs:
public ActionResult Denied()
{
return View();
}
ビュー/アカウント/ Denied.cshtml:(レイザー構文)
@{
ViewBag.Title = "Access Denied";
}
<h2>@ViewBag.Title</h2>
Sorry, but you don't have access to that page.
ユーザーがログインしてページにアクセスしようとすると、AccessDeniedページにリダイレクトされます。良い。しかし、ユーザーがログインしていなければ、AccessDeniedページにリダイレクトされます。悪い。その場合、ログインページにリダイレクトされます。 –
ユーザーがもはや存在しない場合にページをリダイレクトするには、base.OnAuthorization()メソッド呼び出しの後に、Threading.Thread.CurrentPrincipalが存在するかどうかをチェックするコードの残りの部分にifステートメントを追加します。 Identity.IsAuthenticated。この方法では、ユーザーが認証されていない限り、ユーザーはAccessDeniedページに誘導されます。デフォルトのアクション(ログインページにリダイレクト) – Frinavale
このクラスはどこに置かれますか?コントローラーで? – Jay