Skip to content

DataSnap, validación de usuarios y roles

Al crear un Servidor DataSnap en Delphi,queremos limitar el acceso al mismo a aquellos usuarios que se identifiquen adecuadamente mediante usuario y contraseña.

Para realizarlo deberemos tildar la opción Authentication en el apartado Server Features en el momento de crear el Server DataSnap como lo mostramos en la siguiente imagen:

Authentication-DataSnap

O, si ya creamos el Server DataSnap con anterioridad y no tenemos la autenticación activa, realizaremos los siguiente:

En el módulo que contiene el TDSTCPServerTranspor, agregamos un componente TDSAuthenticationManager.

Enlazamos ambos componentes mediante la propiedad AuthenticationManager del primero como mostramos en la siguiente imagen:

AuthenticationManager - DataSnap

TDSAuthenticationManager

El componente TDSAuthenticationManager gestiona la identificación de los usuarios mediante usuario y contraseña, y también realiza la autorización de acceso a los servicios del servidor mediante Roles.

El componente cuenta con una propiedad llamada Roles, que no es más que una colección o lista de objetos TDSRoleItem que representan conjuntos de reglas con las cuales se autoriza o deniega la ejecución de servicios.

Para realizar la autorización o denegación de los roles tenemos
dos alternativas:

En primer lugar, responder al evento OnUserAuthorize del
componente TDSAuthenticationManager.

En segundo lugar y para mi el mejor, indicar los perfiles
asociados a un usuario que inicia sesión en el servidor usando el argumento UserRoles del evento OnUserAuthenticate.

Por ejemplo, si se autoriza un usuario que solo queremos que posea un rol de operador, colocamos:

UserRoles.Append('Operador');

Si en cambio, queremos que sea Admin, colocamos:

UserRoles.Append('Admin');

Identificamos las funciones y procedimientos para cada rol

Ahora solo basta identificar cada una de las funciones y/o procedimientos que estarán disponibles o negadas a cada uno de los roles.

Para ello, en la declaración de dichas funciones y/o procedimientos agregamos la siguiente línea para su identificación:

    [TRoleAuth('Operador')]
    function EchoString(Value: string): string;

    [TRoleAuth('Operador,Admin')]
    function ReverseString(Value: string): string;

Lo que realizamos en el ejemplo anterior, es que a la función EchoString la autorizamos para el Rol Operador y la función ReverseString está autorizada para Operador y Admin.