2009-05-29 12 views
7

Mam następujące metody w kontroler MVC, które przekierowują na stronę logowania, gdy użytkownik nie jest zalogowanyMVC autoryzacji - wielu stron logowania

[Authorize] 
public ActionResult Search() { 
    return View(); 
} 

[Authorize] 
public ActionResult Edit() { 
    return View(); 
} 

jest tam szybkie/proste/standardowy sposób. przekierować drugą akcję do innej strony logowania niż strona zdefiniowana w pliku web.config?

Czy muszę coś zrobić jak

public ActionResult Edit() { 
    if (IsUserLoggedIn) 
    return View(); 
    else 
    return ReturnRedirect("/Login2"); 
} 

Odpowiedz

18

myślę, że jest to możliwe poprzez stworzenie filtru autoryzacji niestandardowe:

public class CustomAuthorization : AuthorizeAttribute 
{ 
    public string LoginPage { get; set; } 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      filterContext.HttpContext.Response.Redirect(LoginPage); 
     } 
     base.OnAuthorization(filterContext); 
    } 
} 

w twoich działań:

[CustomAuthorization(LoginPage="~/Home/Login1")] 
public ActionResult Search() 
{ 
    return View(); 
} 

[CustomAuthorization(LoginPage="~/Home/Login2")] 
public ActionResult Edit() 
{ 
    return View(); 
} 
+1

Przyjemne rozwiązanie. Nie wiedziałem, że możesz to zrobić. http://www.asp.net/LEARN/mvc/tutorial-14-cs.aspx ma dobre wprowadzenie do tworzenia niestandardowych filtrów akcji dla osób, które chcą wyjaśnienia. –

+0

Czy to przełamuje kontrolę roli? – Sinaesthetic

+0

Uwielbiam to rozwiązanie –

1

Web.config uwierzytelniania formularzy opartych nie posiada takiej funkcjonalności wbudowanej (dotyczy to zarówno WinForms i MVC). Trzeba obsługiwać samemu (albo za pośrednictwem HttpModule lub ActionFilter metoda wspomniałeś lub jakakolwiek inna metoda)

Powiązane problemy