2008-12-19 21 views
8

Estoy buscando crear una autenticación en mi aplicación ASP.NET con los siguientes requisitos.ASP.NET: arquitectura de permisos/autenticación

  • Un usuario tiene exactamente un papel (es decir, administración, SalesManager, Ventas, ....)
  • Un papel tiene un conjunto de permisos de acceso a CRUD un subconjunto de objetos existentes. Es decir. "Las ventas tienen CREAD, LEER, ESCRIBIR permiso en el tipo de objeto" Productos "pero no ELIMINAR"
  • De alguna manera me gustan los permisos para estar en una jerarquía con herencia para que yo, por ej. Admin no necesite especificar todos los objetos disponibles .
  • El sistema debe ser rápidamente capaz de responder a la pregunta "¿Tiene el usuario X tiene permiso para hacer Y al objeto Z"
  • Toda base de datos gestionada (MSSQL), implementado en C#/ASP.NET

I Me gustaría recibir comentarios sobre estos requisitos? ¿Alguna idea de cómo implementar esto utilizando el marco ASP.NET (tanto como sea posible)? (Sin embargo, también estoy interesado en saber cómo puede lograrse esto sin membresías)

Respuesta

6

Creo que lo que debe hacer aquí es implementar un conjunto de métodos de consulta de permisos en sus objetos comerciales o su controlador. Ejemplos: CanRead(), CanEdit(), CanDelete()

Cuando la página representa, necesita consultar el objeto comercial y determinar las capacidades autorizadas de los usuarios y habilitar o deshabilitar la funcionalidad en función de esta información. El objeto comercial puede, a su vez, usar Roles o consultas de bases de datos adicionales para determinar los permisos del usuario activo.

No puedo pensar en una forma de definir declarativamente estos permisos centralmente. Deben distribuirse en la implementación de las funciones. Sin embargo, si desea mejorar el diseño, puede usar la inyección de dependencia para insertar autorizadores en sus objetos comerciales y así mantener las implementaciones separadas.

Hay algún código que utiliza este modelo en el libro de Rocky Lhotka. La nueva versión no está en Google todavía.

1

La API de membresía proporcionada desde ASP.NET 2.0 debe satisfacer sus necesidades. Lo único que me temo que no admite directamente son los roles jerárquicos. Sin embargo, puede usar fácilmente la seguridad basada en roles normales con otra tabla de roles jerárquicos escrita manualmente para lograr las cosas necesarias.

1

Usted puede leer sobre cómo configurar ASP.NET membresía aquí: http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx

Se le permite agrupar las carpetas/etc páginas en grupos/usuarios. ¡Creo que encontrarás esto suficiente!

El hiarchy se gestiona fácilmente ampliando las bases de datos y los procedimientos generados.

2

Creo que una de las mejores implementaciones que creo cumplirá con sus requisitos está documentada here. El único problema es que esto se conecta con NHibernate, pero puede usarlo como plantilla para crear su propia implementación de permisos y simplemente enganchar su propio modelo de eventos en lugar de NHibernates Interceptors.

Estoy trabajando en un sistema así y lo bloguearé una vez que esté contento con él.

0

Me gustaría construir la relación usuario/papel para que los usuarios pueden tener más de 1 papel. Veo una relación 1-1 y me pongo nervioso porque sé que incluso si no vemos la necesidad ahora, alguien algún día querrá que alguien sea un usuario de Ventas y un usuario de Servicio al Cliente.

En nuestro sistema de cliente, utilizamos roles para crear capas en cosas como "delinquentCustomer". De esta forma, los permisos originales siguen siendo válidos, tan pronto como paguen su factura. Vale la pena considerar este enfoque.

Cuestiones relacionadas