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
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.