Resumen: Necesito autorizar páginas basadas en los datos presentes en la cadena de consulta de una url, no solo en el nombre de la página.Autorización basada en datos en ASP.NET
Antecedentes:
Digamos que estoy construyendo un sistema de inventario de la biblioteca. Los usuarios se pueden crear y asignar a una única biblioteca en una función de administrador o usuario. Hay cientos de bibliotecas competidoras en la misma base de datos, por lo que es importante asegurarse de que los usuarios de una biblioteca no puedan ver el inventario de otra biblioteca.
En este momento estoy usando una configuración de ASP.NET bastante estándar: Autenticación de formularios con SqlMembershipProvider. Autorización usando SqlRoleProvider, configurado a través de las secciones <authorization>
en web.config. Ajuste de seguridad con el proveedor de SiteMap para ocultar páginas no autorizadas.
Para controlar el filtrado de la información de inventario, estoy verificando manualmente el ID de la biblioteca asociada de un usuario con cada consulta de inventario. Funciona, pero es tedioso y propenso a errores. Tiene que haber una mejor manera.
Pregunta:
Ahora los usuarios tienen la capacidad de crear "colecciones" arbitrarias dentro de una biblioteca. (por ejemplo, Collection A tiene los libros 1, 2, & 3). Los administradores desean la capacidad de otorgar acceso de administrador/usuario a colecciones individuales, no solo a la biblioteca completa.
Por lo tanto, si un usuario va a www.com/Book.aspx?BookId=1
, el sistema necesita asegurarse de que el usuario tenga permisos para la colección en la que está el "Libro 1" antes de mostrar la página. Si van a www.com/Reviews.aspx?ReviewId=23, necesito asegurarme de que la revisión sea para un libro que está en una colección que tienen permiso para ver.
1) ¿Cómo puedo implementar esto de la manera más estándar ASP.NET posible?
¿Comprobación manual dentro de una página base?
¿Un HttpModule personalizado?
¿Un proveedor de funciones personalizado?
No estoy interesado en cómo almacenar los permisos de administrador/usuario, sino cómo/dónde autorizar en función de esos permisos. (ejemplos sobre cómo implementar cualquiera de los son apreciados)
2) Para complicar aún más que, todavía me gustaría recorte de seguridad para comprobar si el usuario tiene derechos de administrador en cualquier colección o biblioteca y ocultar el administrador páginas si no lo hace.
+1 para formatear su pregunta tan increíblemente bien! – user279521
@ user279521: Gracias :) – Greg