none
Implementar ACL RRS feed

  • Pregunta

  • Estimados,

    Tengo una consulta, alguien sabe como implementar ACL en un proyecto MVC4, C#, FW 4.5, para discriminar por action dentro de los controller dinamicamente por rol?

    mi idea es poder crear roles en tiempo de ejecución, no los tendré definidos inicialmente.

    busqué información, pero no encontré nada que me orientara, existe alguna forma, de crear la estructura de base de datos que necesita ACL con alguna especie de instalador o por NuGet?

    de ante mano muchas gracias.

    saludos.

    lunes, 7 de octubre de 2013 14:56

Respuestas

  • Las clases de Membership que vienen "de fábrica" sólo funcionan contra SQL Server. La base de datos correspondiente se puede crear ejecutando el comando aspnet_regsql.exe que se encuentra en la carpeta donde se instaló el Framework.

    Para manejar Membership contra otra base de datos (tal como PostgreSql), lo que hay que hacer es crear una nueva clase heredando de Membership, y dentro hacer un override de los diferentes métodos (tales como AddUser para crear un usuario) de forma que "ataquen" a la base de datos deseada. El ejemplo que viene en los manuales en línea precisamente aporta un override de Membership que por dentro utiliza ODBC para acceder a una base de datos cualquiera:

    http://msdn.microsoft.com/en-us/library/ms366730(v=vs.100).aspx

    Desde luego, podrías modificarlo para usar OLEDB o cualquier proveedor de datos específico que tengas disponible. Después la clase se compila junto con tu proyecto, y se "activa" poniendo dentro del web.config un atributo "provider" que apunta a la clase que acabas de crear. Para los roles se hace lo mismo, heredando de la clase que los maneja y activándola en el web.config mediante el provider del roleManager.

    • Marcado como respuesta Gustavo Mondaca jueves, 10 de octubre de 2013 14:49
    martes, 8 de octubre de 2013 6:14

Todas las respuestas

  • Para crear la base de datos, utiliza simplemente ASP.NET Membership (la estándar). Es perfectamente compatible con MVC. Para manejar roles, ponle enabled="true" en el <roleManager ... /> en el web.config.

    Los roles se pueden crear en tiempo de ejecución con Roles.CreateRole, y luego añadir usuarios al rol con Roles.AddUserToRole.

    En los métodos de acción, determina los roles que pueden acceder a cada método aplicándoles un atributo tal como [Authorize(Roles="rol1, rol2")].

    lunes, 7 de octubre de 2013 16:22
  • Alberto,

    Gracias por tu respuesta, una consulta más de donde puedo sacar la base de datos de Membership? es posible levantarla en Postgresql o solamente me será compatible con SQLServer?

    gracias.

    lunes, 7 de octubre de 2013 18:27
  • Las clases de Membership que vienen "de fábrica" sólo funcionan contra SQL Server. La base de datos correspondiente se puede crear ejecutando el comando aspnet_regsql.exe que se encuentra en la carpeta donde se instaló el Framework.

    Para manejar Membership contra otra base de datos (tal como PostgreSql), lo que hay que hacer es crear una nueva clase heredando de Membership, y dentro hacer un override de los diferentes métodos (tales como AddUser para crear un usuario) de forma que "ataquen" a la base de datos deseada. El ejemplo que viene en los manuales en línea precisamente aporta un override de Membership que por dentro utiliza ODBC para acceder a una base de datos cualquiera:

    http://msdn.microsoft.com/en-us/library/ms366730(v=vs.100).aspx

    Desde luego, podrías modificarlo para usar OLEDB o cualquier proveedor de datos específico que tengas disponible. Después la clase se compila junto con tu proyecto, y se "activa" poniendo dentro del web.config un atributo "provider" que apunta a la clase que acabas de crear. Para los roles se hace lo mismo, heredando de la clase que los maneja y activándola en el web.config mediante el provider del roleManager.

    • Marcado como respuesta Gustavo Mondaca jueves, 10 de octubre de 2013 14:49
    martes, 8 de octubre de 2013 6:14
  • Gracias Alberto :)
    jueves, 10 de octubre de 2013 14:50