Entendiendo el Manejo de Roles


El manejo de roles te ayuda a controlar la autorización, la cual te permite especificar los recursos a los cuales los usuarios que utilizan tu aplicación podrán utilizar dentro de la misma. El manejo de Roles te permite tratar a grupos de usuarios como una unidad, asignando usuarios a los distintos roles como por ejemplo manager, ventas, contabilidad, e.t.c. (En windows, puedes crear roles asignando usuarios a los grupos como Administradores, Power Users, e.t.c.)



Una vez que hayas establecido los roles, puedes crear reglas de acceso para tu aplicación. Por ejemplo, tu sitio puede incluir un conjunto de paginas que quieras que únicamente sean desplegadas a los miembros del sitio. De forma similar, puedes querer mostrar u ocultar parte de una pagina basandote en si el usuario actual es un Administrador o no. Usando roles, puedes establecer este tipo de reglas para cada tipo de usuario que utilice tu aplicación. De esta forma, no tienes que otorgarle permisos a cada usuario que es miembro de tu sitio para que pueda acceder a las paginas exclusivas para miembros. Basta con crear un rol "Miembros" y asignarle los usuarios que queramos que pertenezcan al mismo.

Los usuarios pueden pertenecer a mas de un rol. Por ejemplo, si tu sitio es un foro de discusión, algunos usuarios pueden estar dentro de los roles "Administrador" y "Moderador". Puedes definir cada rol, para que tenga diferentes derechos en el sitio y así, los usuarios que pertenezcan a ambos roles pueden tener ambos conjuntos de derechos.

Aun si tu aplicación tiene únicamente algunos usuarios, puedes encontrar conveniente la creación de roles. Los roles te dan la flexibilidad de cambiar permisos y de agregar o eliminar usuarios sin tener que efectuar cambios en el sitio. Entre mas reglas de acceso definas para tu aplicación, los roles se vuelven una forma mucho mas conveniente de aplicarle los cambios a los grupos de usuarios.

Roles y Reglas de Acceso

El propósito principal de establecer roles, es el manejar de una manera fácil las reglas de acceso para los grupos de usuarios. Primero creas a los usuarios y después, los asignas a los roles, (a los grupos en Windows), El uso mas típico es el crear un conjunto de paginas, las cuales se quieren restringir a ciertos usuarios. A menudo se aíslan estas paginas dentro de su propia carpeta para poder así establecer las reglas que garantizan o deniegan el acceso a las mismas. Por ejemplo, puedes configurar el sitio para permitir que los usuarios dentro de los roles "miembro" y "manager" tengan acceso a las paginas en la carpeta restringida mientras que el resto de los usuarios no. Si un usuario sin autorización trata de ver una pagina restringida, se le mostrara un error o será redireccionado a la pagina que especifiques.

Role Management, User Identity y Membership

Para poder trabajar con los roles, es necesario poder identificar a los usuarios en tu aplicación, así podrás determinar cuando un usuario esta dentro de un rol especifico. Puedes configurar tu aplicación para establecer la identidad del usuario de dos formas: usando windows authentication o forms authentication. Si tu aplicación corre dentro de una intranet, puedes identificar a tus usuarios usando los datos de su cuenta de red de Windows. En este caso los roles del usuario son los grupos de Windows a los que el usuario pertenece.

En las aplicaciones de Internet, es poco practico usar las cuentas de Windows, en cambio, puedes utilizar forms authentication para establecer la identidad de tus usuarios. Para lograr esta tarea, típicamente se crea una pagina donde los usuarios pueden escribir su nombre de usuario y su contraseña para que tu aplicación pueda validar sus credenciales. los controles de Login de ASP.Net pueden hacer mucho de este trabajo por ti o bien, puedes usar la clase FormsAuthentication para establecer la identidad del usuario.

Nota: Los roles lo funcionan con los usuarios que no han establecido su identidad dentro de tu aplicación, (usuarios anónimos).

Si utilizas los controles Login o formularios de autentificación para establecer la identidad del usuario, puedes utilizar el manejo de roles en conjunto con la afiliación, (membership). En este escenario, primero utilizas la afiliación, (membership), para definir los usuarios y sus claves de acceso, después puedes utilizar el manejo de roles, (role management), para definir roles y asignar a tus usuarios a dichos roles. Sin embargo, el manejo de roles no depende de la afiliación. Mientras exista una forma en tu aplicación de establecer la identidad de un usuario, podrás utilizar el manejo de roles, (role management), para la autorización, (authorization).

Role Management y el ASP.NET Roles Service

Puedes acceder a los roles como servicio del Windows Communication Framework (WCF) mediante el servicio de roles de ASP.NET (ASP.NET roles service), El servicio de roles te permite conocer a que roles pertenece un usuario desde cualquier aplicación que pueda leer o consumir un servicio WCF. Por ejemplo, puedes revisar los roles a los que pertenece un usuario desde una aplicación Windows Form o una aplicación Web o una aplicación que no utilice el .NET Framework. Para obtener mayor información sobre el Roles application service, vea Windows Communication Foundation Role Service Overview.

Role Management API

El manejo de roles no esta limitado solo a restringir permisos en paginas y carpetas. El manejo de roles proporciona una API que puedes utilizar para determinar mediante programación cuando un usuario pertenece a un rol o no, permitiendote escribir código que se beneficie con el uso de los roles y ejecute cualquier tarea basada no exclusivamente en quien es el usuario, si no también en los roles a los que dicho usuario pertenece.

Si estableces la identidad del usuario en tu aplicación, puedes usar los métodos proporcionados por la API del manejo de roles para crear roles, agregar nuevos roles y obtener información sobre cuales usuarios se encuentran dentro de que roles. Estos métodos te permiten crear tu propia interfaz para manejar los roles.

Si tu aplicación usa la autentificación de Windows el API para el manejo de roles ofrece algunas características útiles. Por ejemplo, no puedes usar el administrador de roles para crear nuevos roles, en su lugar debes usar el Administrador de usuarios y grupos para crear cuentas de usuario, grupos y asignar usuarios a los grupos. Una vez hecho esto, puedes usar el administrador de roles para leer la información de los usuarios y grupos y así poder usar dicha información para la autentificación.

Si estas usando el servicio de roles ASP.NET, puedes verificar cuando un usuario pertenece a un rol en particular u obtener todos los roles para dicho usuario. Sin embargo, no puedes manejar los roles usando este servicio.

Como funciona la Administración de Roles de ASP.NET

Para utilizar la administración de roles, primero hay que habilitarla y opcionalmente configurar las reglas de acceso que funcionaran con los roles. Una vez hecho esto se pueden usar las funciones pertenecientes a la administración de roles en tiempo de ejecución para trabajar con los roles.

Configurar la Administración de roles

Para usar la Administración de roles hay que habilitarla en el archivo Web.config de la siguiente forma:
<roleManager 
    enabled="true" 
    cacheRolesInCookie="true" >
</roleManager>
El uso típico de los roles es para establecer reglas que permitan o nieguen el acceso a paginas y carpetas. Puedes establecer dichas reglas en la sección "authorization" del archivo Web.config. El siguiente ejemplo muestra como permitír a los usuarios que pertenecen al rol "members" a visualizar las paginas contenidas en el subdirectorio MemberPages y a negarle el acceso a cualquier otro.
<configuration>
  <location path="MemberPages">
    <system.web>
      <authorization>
        <allow roles="members" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <!-- other configuration settings here -->
<configuration>

Para obtener mas información sobre como establecer reglas de acceso vea ASP.NET Authorization.

Necesitas crear los roles, como lo son miembros o manager y después asignar los IDs de usuario a dichos roles. Si tu aplicación utiliza la autentificación de Windows, entonces debes usar la herramienta Windows Computer Management para crear usuarios y grupos.

Si estas usando la autentificación mediante formulario (forms authentication), puedes crear los usuarios y roles mediante la ASP.NET Web Site Administration Tool. Si lo prefieres, puedes hacer esta tarea mediante programación usando los diferentes métodos disponibles para la Administración de roles. El siguiente ejemplo muestra como crear el rol "miembros":

Roles.CreateRole("membros");

El siguiente ejemplo muestra como agregar al usuario Juan al rol "manager", también muestra como agregar a los usuarios "Alicia y Roberta" al mismo rol, pero usando un arreglo de usuarios:

Roles.AddUserToRole("Juan", "manager");
string[] userGroup = new string[2];
userGroup[0] = "Alicia";
userGroup[1] = "Roberta";
Roles.AddUsersToRole(userGroup, "manager");

Nota: Las características para la Administración de Roles no están disponibles cuando se usa el servicio de roles de ASP.NET. El servicio de roles únicamente puede regresar información perteneciente a un usuario en particular.

Trabajando con los Roles en tiempo de ejecución

En tiempo de ejecución, cuando los usuarios visitan tu sitio, establecen su identidad ya sea mediante una cuenta de windows o ingresando a tu aplicación mediante una pantalla de login. (En un sitio de internet, si los usuarios visitan tu sitio sin autentificarse, no tienen identidad de usuario y por consiguiente no están en ningún rol), La información del usuario autentificado esta disponible para tu aplicación mediante la propiedad User. Cuando los roles son habilitados, ASP.NET busca en los roles al usuario actual y lo agrega dicho rol al objeto User para así poder consultarlo. El siguiente ejemplo muestra como determinar cuando el usuario actual pertenece al rol "member". Si el usuario pertenece a dicho rol, el código despliega un botónpara los miembros:

if (User.IsInRole("members"))
{
   buttonMembersArea.Visible = True;
}

Ademas, ASP.NET crea una instancia de la clase RolePrincipal y la añade al request context actual. Esto te permite ejecutar tareas que utilicen el manejo de roles de forma programada, como por ejemplo el determinar que usuarios están en un rol especifico. El siguiente ejemplo muestra como obtener una lista de los roles a los cuales el usuario autentificado actual pertenece:

string[] userRoles = ((RolePrincipal)User).GetRoles();

Si estas usando el control LoginView en tu aplicación, este, automáticamente revisa los roles a los que pertenece un usuario y crear dinámicamente una interfaz de usuario basada en los roles.

Almacenando la Información de un Rol

Si el navegador del usuario soporta cookies, ASP.NET puede almacenar la información de un rol en una cookie s en la computadora del usuario. En cada petición de pagina subsecuente, ASP.NET lee la cookie y llena la información del rol para ese usuario. Esta estrategia minimiza la necesidad de leer la informaciónde un rol de la base de datos. Si el navegador del usuario no soporta cookies o si están deshabitadas, la información del rol únicamente es almacenada por la duración de cada petición de pagina (page request).

1 comentario:

CarlosKaya dijo...

Buenas tardes muy interesante el articulo, estoy nuevo en esto de la programación en asp.net, y aun me surge la siguiente duda con esto de los inicios de sesión. Los usuarios y los roles solo pueden creados desde el administrador de asp.net?...no puedo crear usuarios que ellos mismos sean los que se registren?