İşte benim çözümüm, eu-ge-ne'nin cevabına dayanıyor. Mine, kullanıcı giriş yapmamışsa Giriş sayfasına doğru bir şekilde yönlendirir, ancak oturum açmışlarsa ancak bu sayfayı görüntülemek için yetkilendirilmemişse Erişim Reddedildi sayfasına yönlendirir.
[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();
}
Görüntüleme/Hesap/Denied.cshtml: (Jilet sözdizimi)
@{
ViewBag.Title = "Access Denied";
}
<h2>@ViewBag.Title</h2>
Sorry, but you don't have access to that page.
Kullanıcı giriş yaptıysa ve sayfaya erişmeye çalışırsa, AccessDenied sayfasına yönlendirilir. İyi. Ancak, kullanıcı giriş yapmadıysa, AccessDenied sayfasına yönlendirilir. Kötü.Bu durumda, Giriş sayfasına yönlendirilirler. –
Sayfanın artık kullanıcının içinde olmadığı durumda normal olarak yeniden yönlendirilmesini isterseniz, base.OnAuthorization() yöntem çağrısından sonra, Threading.Thread.CurrentPrincipal öğesinin olup olmadığını kontrol eden kodun geri kalanında bir if ifadesi ekleyin. Identity.IsAuthenticated. Bu şekilde kullanıcı kimlik doğrulaması yapılmadığı sürece kullanıcı AccessDenied sayfasına yönlendirilir. Bu durumda, varsayılan eylemi (giriş sayfasına yönlendirmek) – Frinavale
bu sınıf nereye koyulur? kontrol cihazında? – Jay