2009-05-29 7 views
7

je une des méthodes suivantes dans un contrôleur MVC qui redirigent vers la page de connexion lorsqu'un utilisateur n'est pas connectéMVC Autorisation - plusieurs pages de connexion

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

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

Est-il un moyen rapide/facile/standard pour. rediriger la deuxième action vers une autre page de connexion autre que la page définie dans le fichier web.config?

Ou dois-je faire quelque chose comme

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

Répondre

18

Je pense qu'il est possible en créant un filtre d'autorisation personnalisée:

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); 
    } 
} 

Dans votre action:

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

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

Belle solution. Je ne savais pas que vous pouvez le faire. http://www.asp.net/LEARN/mvc/tutorial-14-cs.aspx a une bonne introduction à la création de filtres d'action personnalisés pour les personnes qui veulent une explication. –

+0

Est-ce que cela brise le contrôle de rôle? – Sinaesthetic

+0

Aimez cette solution –

1

Web.config authentification formulaires ne dispose pas d'une telle fonctionnalité intégrée (cela vaut pour les deux WinForms et MVC). Vous devez gérer vous-même (que ce soit par un HttpModule ou ActionFilter, la méthode que vous avez mentionné ou toute autre méthode)