2011-08-18 2 views
9

C'è un modo per rendere un attributo [Authorize] ignorato in un'azione in una classe controller che ha un attributo Authorize?Applicare AuthorizeAttribute a una classe controller e all'azione simultaneamente

 [Authorize] 
     public class MyController : Controller 
     { 
      [Authorize(Users="?")]//I tried to do that and with "*", but unsuccessfuly, 
      public ActionResult PublicMethod() 
      { 
      //some code 
      } 

      public ActionResult PrivateMethod() 
      { 
      //some code 
      } 
     } 

Solo il PrivateMethod() dovrebbe richiedere l'autenticazione, ma è stato richiesto anche.

PS: Non vorrei rendere il mio filtro di autorizzazione personalizzato.

[s '

+1

Stai cercando di ignorare l'Autorizza che è in classe MyController per la azione PublicMethod o PrivateMethod? – itsmatt

+0

È da ignorare per azione PublicMethod. Ho scritto qualcosa di sbagliato, mi dispiace, ora è risolto! –

risposta

4

Di default è impossibile] - se si imposta [Autorizza] per il controller allora solo autenticato utente può accedere all'azione.

o

Si può provare decisioni personalizzati: stackoverflow.

3

Una soluzione è in questo articolo: Securing your ASP.NET MVC 3 Application

I colloqui articolo su un approccio lista bianca dove si decorare le azioni con un attributo personalizzato AllowAnonymous. È necessario estendere lo AuthorizeAttribute e il metodo OnAuthorization per ignorare i controlli di autorizzazione di AllowAnonymous -actions. (L'approccio è accreditato a Levi, un esperto di sicurezza sulla squadra MVC.)

16

è possibile usare [AllowAnonymous]

[Authorize] 
public class MyController : Controller 
{ 
    [AllowAnonymous] 
    public ActionResult PublicMethod() 
    { 
      //some code 
    } 

    public ActionResult PrivateMethod() 
    { 
      //some code 
    } 
    } 
0
public class MyController : Controller 
    { 
     [Authorize] //it will only work for the following action 
     public ActionResult PublicMethod() 
     { 
     //some code 
     } 

     public ActionResult PrivateMethod() //[Authorize] will not work for this action 
     { 
     //some code 
     } 
    } 
+0

Prova ad aggiungere alcune parole per spiegare la tua risposta. Le risposte del solo codice sono normalmente meno utili. – Matt