Crear un login en AppSheet y dar permisos por ROL

Accede al curso de AppSheet

En este artículo vamos a aprender a crear un login en AppSheet y dar permisos por Rol. La principal motivación para crear un login en una App de AppSheet es controlar a que módulos, formularios o vistas puede acceder cada usuario en función del rol que tenga.

Ya hemos explicado en este blog como crear un login sencillo (Crear un login Sencillo), mediante el menu user settings. En esta ocasión vamos a ir un paso mas allá y vamos a crear un login con roles de usuario, es decir, vamos a controlar que tipo de usuario es cada uno y en función de esto daremos permisos a estos a las diferentes partes de nuestra aplicación.

Comenzamos a crear nuestro login

Como ya hemos visto anteriormente para realizar un login debemos crear una tabla de usuarios en nuestra base de datos con los campos idusuario, nombre_usuario, contraseña y rol, y seguidamente acceder al apartado “user settings” de nuestro editor mejorado de AppSheet. Dentro de este tenemos que configurar 3 campos en este caso nos interesa que cuando un usuario acceda a la pagina de login se muestre que tipo de rol tiene, por esto vamos a configurar 3 campos si no, nos bastaría con dos.

Crear un login en AppSheet y dar permisos por ROL

En los 3 campos que vayamos a utilizar tenemos que activar la pestaña show para que se vean al entrar en el formulario de login, como ya vimos anteriormente el campo NOMBRE lo vamos a relacionar con el campo usuario de nuestra tabla USUARIOS de forma que cuando pinchemos nos aparezcan todos los usuarios de nuestra tabla. Esto lo haremos configurandolo como tipo REF e indicando con cual tabla esta relacionada.

Configurando el campo CLAVE

En el campo CLAVE vamos a configurar una formula de forma que si no se escribe la clave correcta de este usuario no me deje validar este formulario. La formula seria esta [_this]=lookup(USERSETTINGS(NOMBRE),”USUARIOS”,”NOMBRE_USUARIO”,”CLAVE”) que lo que viene a decir es que para que me deje guardar el formulario usersettings el campo CLAVE ([_THIS]) tiene que ser igual al resultado de la función LOOKUP que lo que hace realmente es buscar en nuestra tabla de usuarios, el usuario que hemos escrito en el campo NOMBRE de user settings)

En el campo TIPO hemos configurado una formula para que cuando escribamos el nombre del usuario, nos devuelva el tipo de ROL que tiene. La formula que hemos escrito es: LOOKUP(USERSETTINGS(NOMBRE),”USUARIOS”,”NOMBRE_USUARIO”,”ROL”).

Esta fórmula lo que nos hace es que recoge el nombre que hemos puesto en el campo NOMBRE de user settings y lo va a buscar a la tabla usuarios y nos devuelve el ROL de este usuario.

Configurar los botones del login

Bien, una vez configurado todo esto ya tendríamos configurado el acceso, para hacer mas elegante el inicio de sesion con nuestro login vamos a tocar un poco los botones del formulario USERSETTINGS, para ello nos vamos a ir al menu SETTINGS (no confundir con usersettings) y vamos a ir al apartado de LOCALIZATION o localización si lo decimos en idioma español. Alli vamos a buscar los menús SAVE y CANCEL y vamos a pinchar en el icono del filtro para escribir una formula.

Con esta formula le vamos a decir a nuestra app que si estamos en el menu login de usersettings nos aparezcan en vez de Save o guardar pues el menu INICIAR SESIÓN y además que cancelar no aparezca en nuestro inicio de sesion. Estas serian las formulas:

IF(Context(“View”)=”Settings”,”Iniciar Sesion”,”Save”)

IF(Context(“View”)=”Settings”,””,”Cancel”)

Crear un login en AppSheet y dar permisos por ROL

Una vez hayamos realizado todas estas tareas tendríamos que poner el formulario o vista USERSETTINGS como formulario o vista de INICIO en nuestra app, para ello debemos ir al menu SETTINGS de nuestro editor mejorado y en el apartado de VIEWS / GENERAL y seleccionar la vista USERSETTINGS como STARTING VIEW

Una vez hecho todo esto al iniciar la aplicación nos debería salir algo parecido a esto, una vez hayamos elegido a un usuario.

Configurar los permisos del Login

Ahora nos queda configurar los formularios y vistas para que al iniciar sesión con un rol solo puedas entrar a los formularios autorizados. Para ello debemos actuar a nivel de vistas en el apartado de DISPLAY y debemos configurar el show if con esta formula:

IN(USERSETTINGS(NOMBRE),SELECT(USUARIOS[NOMBRE_USUARIO],[ROL]=”ADMIN”))

Es decir, le estamos diciendo que para que muestre esta vista tiene que buscar el nombre de usuario grabado en usersettings en la tabla usuarios y luego mirar si el rol es admin, con la funcion IN le decimos que nos traiga los usuarios que tienen el rol de admin y si el nombre que hemos puesto en USERSETTINGS esta entre esos nombres va a mostrar la vista.

Otro elemento importante es buscar una forma de CERRAR SESION para que si entra otro usuario no vea los datos cargados anteriormente en la tabla USERSETTINGS para ello y ante la falta de soluciones para este punto que nos da AppSheet debemos recurrir a crear un usuario que se llame CERRAR SESIÓN y con los datos en blanco, este usuario no tendria permisos para entrar en ninguno de los modulos o vistas de nuestra aplicación y nos permite borrar los datos del anterior usuario. Lo que tendría que hacer el usuario es elegir este usuario en el login antes de abandonar la app.

Configurando varios roles

En en caso de que tuviéramos varios roles el tema de la configuración de permisos se complica un poco pero al final viene siendo lo mismo,, en este ejemplo tenemos 3 roles + el usuario cerrar sesión, en este caso la formula que hemos introducido en el show if es la siguiente:

OR(LOOKUP(USERSETTINGS(NOMBRE),”USUARIOS”,”NOMBRE_USUARIO”,”ROL”)=”ADMIN”,LOOKUP(USERSETTINGS(NOMBRE),”USUARIOS”,”NOMBRE_USUARIO”,”ROL”)=”ROLUSER1″,LOOKUP(USERSETTINGS(NOMBRE),”USUARIOS”,”NOMBRE_USUARIO”,”ROL”)=”ROLUSERPLUS”)

En este caso en vez de usar la función IN como en el caso anterior hemos usado la función LOOKUP y la hemos complementado con el uso de la funcion lógica OR, como podemos ver a esta vista o formulario podran acceder los roles ADMIN, ROLUSER1 Y ROLUSERPLUS

Configurar permisos a nivel de campo o columna

También podemos trabajar a nivel de campos de la tabla, en este caso podemos configurar que unos campos solo puedan ser vistos por ciertos roles de usuario. Para ello tendríamos que escribir esta formula en el apartado show if de cada campo o columna en la tabla.

Si tenemos implementado un menu de inicio en pantalla también podemos configurar el acceso a los diferentes iconos de este menu (que son las diferentes vistas de la app) mediante un slice al que le pondremos esta condición:

AND(USERSETTINGS(NOMBRE)<>”CERRAR SESION”;OR([ITEM]=”PEDIDOS”;[ITEM]=”COMPRAS”;LOOKUP(USERSETTINGS(NOMBRE),”NOMBRES”,”NOMBRE”,”ROL”)=”ADMIN”))

En este caso a las vistas Pedidos y compras pueden acceder todos los roles menos cerrar sesion. y a las demás solo pueden acceder el usuario ADMIN

Carrito de compra