ASP-NET MVC 5 – Filter Overrides

Como muchos ya sabrán, hasta la salida de ASP.NET MVC 5, no había forma de anular los filtros de acción en un controlador o acción en particular (cuestión que se hace más evidente cuando trabajamos con filtros globales). Por lo tanto cuando tenemos que hacer este tipo de excepciones no queda otra alternativa que quitar el filtro de la acción y/o controlador a omitir e ir aplicando los filtros en el resto de las acciones y/o controladores de manera individual.

Una de las nuevas features que trae ASP.NET MVC 5 es la de Filter Overrides. Esta característica nos permite anular filtros que se aplican sobre un método de acción o controlador. Estos filtros se denominan  “filtros de anulación” y a continuación veremos como implementarlos.

Importante! Respecto de está característica se ha encontrado un error en MVC5, se registro en MVC5 RC y se ha aplicado el fix en la version MVC 5.1. Veremos como aplicarlo de la manera “oficial” y una forma alternativa para quienes sigan usando MVC5.

Veamos un ejemplo. Supongamos que tenemos un filtro de autorización – Authorize filter – que aplica de forma global a un controlador y queremos anularlo en una acción en particular (en este ejemplo la acción sería About). Hasta la salida de esta nueva versión, la solución no era tan directa, pero con MVC5 podemos realizar esta tarea de una manera muy sencilla:

Implementando el atributo OverrideAuthorization

Implementando el atributo OverrideAuthorization

Si observan el código por un lado podrán ver que hemos decorado del AdminController con el atributo de autorización el cual aplica a todos los métodos de acción del mismo. Para anular este comportamiento simplemente debemos decorar la/s acciones con el atributo [OverrideAuthorization]. Además de anular este filtro podemos agregar nuevos (en el ejemplo autorizaríamos al usuario “Sebis” a esta vista).

Simple, no?

Actualmente el framework nos proporciona 5 tipos de filtros de anulación:

  • OverrideActionFilters
  • OverrideAuthentication
  • OverrideAuthorization
  • OverrideExceptionFilters
  • OverrideResultFilters

Ojo con el Bug!

Como dijimos antes, hay un bug con esta feature que está solucionado con la versión MVC 5.1 RC. Si ya tenemos nuestro proyecto MVC 5 en marcha, podemos aplicar la siguiente solución.

La cosa es simple, vamos a tener que crear un nuevo filtro de anulación – en este caso lo llamaremos OverrideAuthorizeAttribute – que herede del atributo que deseamos anular – en este caso AuthorizeAttribute – e implemente la interfaz IOverrideFilter. Por último debemos implementar la propiedad FiltersToOverride la cual determina los filtros a anular:

Creando nuestro propio filtro de anulación.

Creando nuestro propio filtro de anulación.

Hecho esto ya podemos aplicar el filtro de anulación en cuestión:

Aplicando el filtro de anulación OverrideAuthorize.

Aplicando el filtro de anulación OverrideAuthorize.

Como pueden ver esta característica es por demás interesante, así que a tenerla presente.

Más de info sobre el tema en este excelente post de Imran Baloch y este otro gran post de Hack The Web with .NET.

Anuncios

2 comentarios en “ASP-NET MVC 5 – Filter Overrides

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s