martes, 22 de noviembre de 2011

Seguridad flexible en asp.net usando Modulos

Hace poco, mientras trabajaba en un proyecto para un cliente en ASP.Net, no precisamente mi fuerte ni mucho menos mi favorito, tuve que trabajar en una implementación de seguridad.

Mi conversación con el cliente fue más o menos como sigue:

Cliente: "Queremos tener una forma flexible de crear roles en el sistema y asignar dichos roles a los usuarios y páginas del sitio de forma que el administrador tenga control de quien puede ver que en la aplicación"

Yo: "Es decir que quieren cargar los usuarios y sus roles desde la base de datos (algo que ya hacemos) y además los roles de las páginas desde la base de datos ¿correcto?"

Cliente: "Sí, es correcto"

Después de un poco de investigación me vino a la mente implementar esto usando un IHttpModule que interceptara los request a la aplicación y allí hacer las validaciones correspondientes.

Todo el código de este proyecto de ejemplo lo subí a GitHub aquí y está bajo licencia apache, así que adentale si desean bajarlo y usarlo y/o mejorarlo, cualquier comentario es bienvenido.
Por cierto casi se me olvida mencionar que estoy usando BLToolkit  para la capa de acceso a datos.


A continuación cómo resolví el problema:

1. Diseñemos las tablas y sus relaciones y las creamos en la base de datos
2. Implementamos la interfaz IHttpModule:

3. Para poder probar nuestra aplicación decidí configurar un MembershipProvider para validar los usuarios y un RoleProvider para cargar los roles de usuarios. Para más detalles de la forma como implementé estos providers pueden ver el proyecto de ejemplo aquí.

4. Y por supuesto debemos configurar los providers y el modulo antes mencionados en el Web.config

Y todo listo para probar, solo necesitamos ejecutar el proyecto si estas usando VisualStudio o instalarlo en el servidor por ejemplo IIS.

Más sobre como implementar providers para asp.net aquí y aquí.

Hasta la próxima.