2011-07-14 25 views
11

Existe un atributo de autorización en la parte superior de mi controlador que significa que contiene todas mis acciones. Quiero excluir algunas acciones de este atributo (estas acciones estarán disponibles para usuarios anónimos). ¿Es posible?Excluir algunas acciones de Autorizar en ASP.net MVC

[Authorize] 
public class TestController : Controller 
{ 
    public ActionResult Index() 
    { 
    ... 
    } 
    ... 

    //available by anonymous 
    public ActionResult Test() 
    { 
    ... 
    } 
} 

Respuesta

11

que puede tomar el enfoque descrito en esta entrada del blog de crear un atributo AllowAnonymous y la colocación de este atributo en acciones yo u desea excluir:

http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx

Esto será en el marco de vNext por cierto.

+0

Puede encontrar una versión actualizada de mi blog en http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and -the-new-allowanonymous-attribute.aspx – RickAndMSFT

+1

[AllowAnonymous] es el camino a seguir, como ya está en MVC 5 – Adamy

4

Es posible que desee poner el atributo encima de las acciones restringidas y dejar las otras (aquellas en las que desea permitir el acceso anónimo) solo.

También sacarlo de la parte superior de la clase.

9

Poner el atributo [Authorize] en el controlador es básicamente un atajo para ponerlo en cada acción, por lo que su código es lógicamente equivalente a

// No [Authorize] here 
public class TestController : Controller 
{ 
    [Authorize] 
    public ActionResult Index() 
    { 
     // code here... 
    } 

    [Authorize] 
    public ActionResult Test() 
    { 
     // code here... 
    } 
} 

Usted probablemente puede ver donde voy con esto - retire el atributo del controlador, y lo puso en las acciones específicas que desea ser restringido:

// No [Authorize] here 
public class TestController : Controller 
{ 
    [Authorize] 
    public ActionResult Index() 
    { 
     // code here... 
    } 

    // no [Authorize] here either, so anonymous users can access it... 
    public ActionResult Test() 
    { 
     // code here... 
    } 
} 
Cuestiones relacionadas