curso de appsheet desde cero

Gestión de usuarios y permisos en AppSheet, desde useremail a usersettings

Ver video

Introducción

La gestión de Usuarios y permisos en AppSheet, a pesar de ser un tema importante no es muy conocido. Cuando has diseñado una app en AppSheet lo siguiente que puedes necesitar hacer es compartirla con otros usuarios, así seas un desarrollador y realices apps para terceros o seas el administrador de la aplicación y vayas a tener otros usuarios que accedan a ella, lo cierto es que tendrás que compartir la app con otras personas.

En este caso, necesitas configurar los permisos de cada usuario, es decir, que datos va a poder ver, modificar y que acciones va a poder realizar en la App, en función de su rol dentro de la organización o en función de los parámetros que el administrador estime oportunos.

Compartir mi app con otros usuarios.

Para compartir una app con otros se utiliza un enlace que se envía a la persona que quieres que acceda, si la app tiene habilitada la autenticación de Google entonces previamente deberás añadir al usuario por medio de su correo electrónico a los usuarios autorizados, esto lo debes hacer en el botón SHARE APP

Al añadir el usuario puedes asignarle los siguientes permisos:

Edit definition: permisode edición de la app en este caso sería como un coautor.

View definition: permiso para ver la edición, pero no poder modificarla.

User: permiso solo como usuario, pero no puede acceder al editor de AppSheet.

También si pinchas en el botón advanced puedes asignarle un ROL como Admin o User. Como veremos mas adelante, este rol lo podemos usar también en nuestra App para configurar algunos permisos mediante la variable o función USERROLE().

Si no tienes habilitada la autenticación de Google significa que la app es publica y cualquiera podrá acceder a la información guardada en ella, esto puede ser un riesgo si tienes datos privados.

Existe la posibilidad de crear un fichero APK desde Appsheet y luego subirlo a alguno de los stores, Play store de Android o Apple store de Apple. Para poder generar el fichero APK desde Appsheet debes tener la aplicación implementada (DEPLOYED), en el plan Free o gratuito de Appsheet por defecto la app esta en modo prototipo (no implementada), aunque según lo indicado recientemente, con el plan free puedes tener la App implementada pero solo con 3 usuarios.

Para introducir una app en alguna de estas plataformas es necesario crear una cuenta de desarrollador en aquella donde deseemos distribuir la app y luego subirla, hay que tener en cuenta que la plataforma nos la tiene que aprobar para poder distribuirla.

Aunque la información no está clara, puedes tener hasta 10 usuarios si tienes la app no implementada o en modo prototipo (plan free), hay expertos que dicen que cada uno de esos usuarios pueden acceder por 3 dispositivos diferentes, por lo que configurando un login se podría tener 30 usuarios supuestamente que podrían acceder con plan gratuito.

Esta opción no está confirmada oficialmente por AppSheet o Google y si la utilizamos corremos el riesgo de que la aplicación sea bloqueada.

En el día de hoy 25/03/2024 he tenido una conversación en el chat de ayuda de Appsheet gestionado por Google y me han indicado que efectivamente cada usuario puede entrar por 3 dispositivos diferentes, pero siempre y cuando cierren la sesión en uno y entren en el otro dispositivo, en el caso de que entren en los 3 dispositivos a la vez la app puede ser bloqueada, también Google te puede bloquear la app si entran mas de 10 usuarios en el modo prototipo.

En esta misma conversación me han indicado que puedes implementar la app con el plan free, pero solo puedes tener 3 usuarios en la app. Lo que esta claro es que la información en materia de usuarios no es muy concreta y si te pasas de 10 usuarios en modo prototipo te pueden bloquear.

También es importante saber que en el caso de que distribuyamos nuestra app a diferentes usuarios debemos desarrollar en ella un sistema de configuración de permisos de forma que unos usuarios no accedan a la información de otros usuarios.

También tenemos la opción de las private tables, es una opción que nos permite que cada usuario tenga su tabla privada y que ni siquiera el administrador de la app pueda acceder, sobre esto tengo que investigar más, pero creo que podría ser una buena opción a la hora de distribuir una app por el play store o apple store.

La gestión de usuarios y permisos en AppSheet, Desarrollar apps para nuestros clientes.

Si nos queremos dedicar a desarrollar apps de AppSheet podemos compartir estas de varias formas, a priori la forma más fácil seria crear una cuenta de Google, desarrollar la app y luego dar las credenciales al cliente o propietario final de la aplicación.

En este caso hay que tener en cuenta que si creas muchas cuentas de Google puedes tener problemas porque el sistema te identificará como un robot, te pedirá un número de teléfono y cuando crees muchas te dirá que el numero ya se ha utilizado muchas veces.

En este caso lo mejor seria que el cliente te cree la cuenta y te de las credenciales, desarrollas la aplicación y luego ya se la queda el propietario.

Otra opción es crear la app en una de tus cuentas de Google y luego compartírsela al correo del cliente en modo edit definition y luego el cliente la debe copiar dejando activas las opciones de copiar archivos y bases de datos.

Esto suele dar problemas si tenemos bots, imágenes o rutas dentro de la app por lo que normalmente después tendremos que retocar la app copiada para dejarla funcionando correctamente.

Otra opción es transferir la propiedad de la app una vez compartida, pero el problema es que también tendrías que transferir la propiedad de la base de datos que tenemos en Google drive.

Para esto, el proceso sería primero compartir al usuario, este usuario tendría que solicitarnos la propiedad en el menú MANAGE y dentro en el menú Collaborate & Publish. Cuando recibamos la solicitud debemos aceptarla, luego tendríamos que ir al Google drive y transferir la propiedad de la hoja de sheets al mismo correo al que transferimos la propiedad de la app.

Sistema de acceso y autenticación en AppSheet.

Cuando hablamos de establecer permisos en una app desarrollada con AppSheet debemos diferenciar si tenemos habilitada la autenticación de Google o la app es pública.

  • Autenticación con Google. Useremail()

Se utiliza la seguridad de Google y se accede a la app por medio del correo de Gmail y contraseña propios de la cuenta de Google.

Para saber que usuario ha accedido a la app utilizaremos la variable o función USEREMAIL() que nos devuelve el email que esta logueado.

También tenemos disponible la variable o función USERROLE() que nos indica el rol que tiene el usuario que ha accedido. Hay dos posibles Admin y User, esto lo explicaremos mejor mas adelante en este documento, en los casos prácticos más usuales.

  • Publica sin autenticación. Usersettings()

No se utiliza la seguridad de Google, para ello hay que desactivar una opción que está en el menú Security, esta opción es “Require user signin?”, al desactivarla se accede libremente solo con el enlace y para controlar el acceso debemos crear un login en la app utilizando una herramienta propia de las aplicaciones hechas con Appsheet que se llama USERSETTINGS().

Crear un login en nuestra App

Si hemos elegidodejar publica nuestra app (sin autenticación de Google) o si, teniendo autenticación de Google queremos controlar los usuarios de una forma más exhaustiva, entonces tendremos que configurar un LOGIN.

Para ello, en la zona de las tablas de datos (DATA) hay un menú llamado User settings (Ver Imagen 9) Dentro de este menú tenemos que seleccionar algunos de los campos llamados OPCION 1, OPCION 2, etc.… que existen por defecto en esta tabla del sistema, debemos activar la casilla SHOW para que se muestren y cambiarles el nombre por el que queramos, normalmente USUARIO y CONTRASEÑA.

Después de configurar estas opciones nos aparece una vista llamada settings en el apartado de VIEWS o VISTAS que tenemos que configurar como vista de inicio en las opciones generales de vistas en el menú settings (no confundir con User settings ni con la vista settings

La opción usersettings se puede usar, aunque tengamos la autenticación de Google activada.

Para poder usar el login debemos tener una tabla de usuarios y contraseñas (imagen 1), en este caso en el campo contraseña del apartado de usersettings tendríamos que crear una validación de datos en el apartado data validity del campo, concretamente en valid if (imagen 4) la formula usada es:

[_THIS]=LOOKUP(USERSETTINGS(“USUARIO”),”USUARIOS”,”USUARIO”,”CONTRASEÑA”)

La gestión de usuarios y permisos en AppSheet, Registrar el usuario que accede a la App

Lo primero que debemos de pensar es que para poder asignar permisos a la app primero debemos de poder registrar el usuario que esta accediendo y usando la app.

Para ello si tenemos activada la opción de autenticación con Google podemos registrar el usuario que esta accediendo por medio de la variable USEREMAIL() es decir USEREMAIL()=correo electrónico que está accediendo, en el caso que no tengamos activada la autenticación de Google podemos saber el usuario estableciendo un login como se indicó anteriormente en este documento.

En este caso USERSETTINGS(“CAMPO”) donde campo sería el nombre del campo que hemos establecido en USERSETTINGS, siguiendo el ejemplo anterior donde creábamos los campos USUARIO y CONTRASEÑA pues para acceder a lo que se ha guardado en el campo USUARIO al entrar en la app escribiríamos USERSETTINGS(“USUARIO”)

Una vez que hemos registrado el usuario que ha accedido a la app podemos usar esta información para establecer los permisos.

Situaciones normales en las que tenemos que configurar permisos:

CASO 1 Diferentes usuarios y no queremos que unos vean los datos de otros

Tenemos diferentes usuarios y no queremos que unos vean los datos de los otros, por ejemplo, varios vendedores que solo deben ver sus pedidos, pero no los de otros vendedores. Y además un usuario administrador debe acceder a ver todos los pedidos.

En este caso debemos configurar en los registros que guardemos un campo donde establezcamos el usuario que lo ha guardado, esto lo podemos recoger automáticamente, estableciendo un valor inicial en el campo creado donde escribamos USEREMAIL(), es decir, crearíamos un campo llamado usuario o vendedor y en ese campo en el INITIAL VALUE escribiríamos USEREMAIL().

Incluso podemos hacer que este campo sea oculto, y cuando creemos un registro en este campo se registrará el usuario. Lo mismo podemos hacer con USERSETTINGS, solo tendríamos que sustituir la expresión USEREMAIL() por USERSETTINGS(“USUARIO”)  obviamente con antelación tenemos que haber registrado el usuario por medio del login.

Una vez registrado el usuario que guarda la información y el usuario que accede tenemos que decirle a Appsheet que el usuario solo puede ver su información.

Esto lo podemos hacer por medio de un SLICE o configurando los Security Filters en el apartado de Security, de nuestro editor de appsheet. Las formulas o condiciones a usar serian iguales, la única diferencia seria que lo crearíamos en la misma tabla o en un slice.

 Al crear un slice de la tabla principal estamos creando un filtro con una condición, en esta condición le decimos: [USUARIO]=USEREMAIL()  ó   [USUARIO]=USERSETTINGS(“USUARIO”).

Si además queremos que un usuario administrador pueda acceder a todos los datos la cosa se complica un poco pero no demasiado. Podemos hacer la condición del slice de esta forma:

OR([USUARIO]=USEREMAIL() , USEREMAIL()=”admin@gmail.com”)

donde admin@gmail.com sería la dirección de correo electrónico del usuario administrador.

En el caso de estar usando USERSETTINGS sería:

OR([USUARIO]=USERSETTINGS(“USUARIO”)  , USERSETTINGS(“USUARIO”) =”Manuel Aragonés”)

Para este caso y para otros sería muy útil para el administrador poder tener una tabla de usuarios con una vista de usuarios donde poder aplicar los permisos por ROLES o GRUPOS, es decir, que yo como administrador principal pudiera aplicar un ROL u otro a un usuario sin tener que entrar a editar la app sino desde la misma app.

Llegados a este punto hay que decir que si estamos accediendo con USEREMAIL() es decir, autenticación de Google, existe una variable llamada USERROLE() que nos devuelve el rol de usuario dentro del sistema, solo hay dos posibles roles Admin y User

En la sección SECURITY existe un botón MANAGE USERS donde podemos dar a cada usuario su ROL, lo podemos ver en la imagen 8

Si estamos usando USERSETTINGS o simplemente no nos basta con el USERROLE() interno de AppSheet podemos establecer nuestro propio sistema de roles.

En este caso tendríamos que crearnos una tabla de usuarios, contraseñas y roles en el caso de USERSETTINGS sería la imagen 2 y en el caso de USEREMAIL() seria la imagen 3 y además tendríamos que cambiar un poco la forma de configurar los permisos. En concreto para este CASO tendríamos que utilizar esta condición en el SLICE de forma que si estamos usando el USEREMAIL() solo tendríamos que sustituir USERSETTINGS(“USUARIO”)  por USEREMAIL()

USERSETTINGS

OR([USUARIO]=USERSETTINGS(“USUARIO”)  , LOOKUP(USERSETTINGS(“USUARIO”) ,”USUARIOS”,”USUARIO”,”ROL”)=”ADMIN”)

USEREMAIL

OR([USUARIO]=USEREMAIL() , LOOKUP(USEREMAIL() ,”USUARIOS”,”USUARIO”,”ROL”)=”ADMIN”)

En este caso utilizamos la función lookup para buscar el nombre que se ha logueado en la app USERSETTINGS(“USUARIO”)  en la tabla USUARIOS en el campo USUARIO y nos devuelva el valor que se encuentra en el campo ROL.

Podemos incluso tener varios roles que podríamos comprobar con otras opciones del OR, por ejemplo, podríamos tener una tabla de almacén a la cual tuviera que entrar el usuario que registro el dato, el rol admin y el encargado de almacén (ROL ALMACEN) en este caso lo que haríamos seria crear otra opción en el OR y recuerda que con useremail seria igual pero sustituyendo USERSETTINGS(“USUARIO”) por USEREMAIL()

OR([USUARIO]=USERSETTINGS(“USUARIO”)  , LOOKUP(USERSETTINGS(“USUARIO”) ,”USUARIOS”,”USUARIO”,”ROL”)=”ADMIN”, LOOKUP(USERSETTINGS(“USUARIO”) ,”USUARIOS”,”USUARIO”,”ROL”)=”ALMACEN”)

Otra posibilidad es crear una tabla de ROLES y USUARIOS como un campo ENUMLIST que nos permita agregar usuarios al grupo del ROL y en este caso tendríamos que cambiar la función LOOKUP() por la función IN() quedaría de esta forma:

OR([USUARIO]=USERSETTINGS(“USUARIO”)  , IN(USERSETTINGS(“USUARIO”) ,SELECT(ROLES[USUARIOS],[ROL]=”ADMIN”)

En el caso de que queramos cambiar los permisos o roles desde la misma app tendríamos que tener una tabla de usuarios y una vista de usuarios donde solo pudiera entrar el usuario administrador y que tuviera la opción de cambiar el rol de cada usuario.

CASO 2 . Tenemos algunas secciones de la app donde queremos que accedan solo las personas que deben utilizarlas.

En este caso podemos optar por restringir Tablas o restringir Vistas

En las tablas

Si queremos restringir las tablas deberíamos ir al menú SECURITY de nuestro editor de appsheet y configurar los SECURITY FILTERS, de la misma forma que hicimos en el caso anterior. En principio las formulas o condiciones son las mismas que vamos a ver al configurar las vistas.

En las vistas

Tenemos algunas secciones (vistas) de la app donde queremos que accedan solo las personas que deben utilizarlas en su trabajo diario y que deben tener acceso a los datos.

En este caso podemos configurar la sección SHOW IF del apartado DISPLAY de la vista a la que queramos dar permisos (IMAGEN 4) y en este caso tendríamos que aplicar las siguientes configuraciones:

Con USEREMAIL()

si queremos que solo entre un usuario concreto:

USEREMAIL()=admin@gmail.com

Si queremos que entren dos usuarios concretos

OR(USEREMAIL()=”admin@gmail.com”, USEREMAIL()=”admin2@gmail.com”)

Con USERSETTINGS como siempre seria sustituyendo USEREMAIL() por USERSETTINGS(“USUARIO”)

Si queremos que entre un ROL concreto

USERSETTINGS           LOOKUP(USERSETTINGS(“USUARIO”) ,”USUARIOS”,”USUARIO”,”ROL”)=”ADMIN”

USEREMAIL                  LOOKUP(USEREMAIL() ,”USUARIOS”,”USUARIO”,”ROL”)=”ADMIN”

Si queremos que entre varios ROLES concretos

OR([USUARIO]=USERSETTINGS(“USUARIO”)  , LOOKUP(USERSETTINGS(“USUARIO”) ,”USUARIOS”,”USUARIO”,”ROL”)=”ADMIN”, LOOKUP(USERSETTINGS(“USUARIO”) ,”USUARIOS”,”USUARIO”,”ROL”)=”ALMACEN”)

CASO 3 Tenemos tablas que queremos que sean de solo lectura, actualización o libres según el rol del usuario como administrador o usuario normal.

En este caso tenemos que acudir al apartado DATA de nuestro editor de appsheet y entrar en la tabla que queremos configurar y acceder a TABLE SETTINGS que podemos ver en las imagenes 6 y 7

Usaremos la función que nos aparece por defecto

SWITCH(USEREMAIL(),

  “user1@mydomain.com”, “UPDATES_ONLY”,

  “user2@mydomain.com”, “ALL_CHANGES”,

  “READ_ONLY”)

En este caso como vemos se esta usando el USEREMAIL()

La función SWITCH funciona de esta forma, el primer parámetro es la condición a comprobar en este caso es USEREMAIL() en el caso de que USEREMAIL() sea user1@mydomain.com entonces solo podrá actualizar los registros “UPDATES_ONLY” , si USEREMAIL() es  user2@mydomain.com puede efectuar todos los cambios en las tablas “ALL_CHANGES”, si es otro email solo puede leer las tablas (“READ_ONLY”)

Por ejemplo en el caso de mi tabla usuarios con roles de USEREMAIL() (IMAGEN 3)

Lo haríamos asi:

SWITCH(USEREMAIL(),

  “practicas.manuelaragones@gmail.com”, “UPDATES_ONLY”,

  “clasesonlineofimatica@gmail.com”, “ALL_CHANGES”,

  “READ_ONLY”)

En el caso de que quisiéramos controlar esto por ROLES:

SWITCH(LOOKUP(USEREMAIL(),”USUARIOS”,”USUARIO”,”ROL”),

  “USER”, “UPDATES_ONLY”,

  “ADMIN”, “ALL_CHANGES”,

  “READ_ONLY”)

En el caso de que quisiéramos controlar esto por ROLES y con USERSETTINGS()

SWITCH(LOOKUP(USERSETTINGS(“USUARIO”),”USUARIOS”,”USUARIO”,”ROL”),

  “USER”, “UPDATES_ONLY”,

  “ADMIN”, “ALL_CHANGES”,

  “READ_ONLY”)

CASO 4 Tenemos un menú de inicio y queremos que solo se vean ciertos iconos en función del usuario.

Para poder controlar este menú inicio en la tabla de menú inicio debemos agregar un campo llamado PERMISO y escribir el ROL o correo que queremos que pueda acceder en este caso configuraríamos los SECURITY FILTERS en el editor o crearíamos un slice como en el CASO 1 y le daríamos como condición que el campo PERMISO sea igual al ROL o correo del usuario, tendríamos estas posibilidades:

[PERMISO]=USERSETTINGS(“USUARIO”)     si solo queremos que el icono de inicio lo vea un usuario con USERSETTINGS

 [PERMISO]=USEREMAIL()                               si solo queremos que el icono de inicio lo vea un usuario con USEREMAIL()

[PERMISO]= LOOKUP(USERSETTINGS(“USUARIO”),”USUARIOS”,”USUARIO”,”ROL”)     si solo queremos que lo vea un ROL con usersettings

[PERMISO]= LOOKUP(USEREMAIL(),”USUARIOS”,”USUARIO”,”ROL”)     si solo queremos que lo vea un ROL con USEREMAIL()

CASO 5 Tenemos unas acciones que queremos que se muestren o no en función del usuario.

Para controlar quien puede usar las acciones que se crean por defecto o las creadas por nosotros en la app debemos configurar la sección BEHAVIOR de la acción concretamente debemos escribir una condición en el punto Only if this condition is true donde podríamos usar todas las formulas vistas anteriormente en otros casos.

Si quieres saber mas de este tema o contactar conmigo para cualquier servicio pincha AQUI

IMAGEN1 La gestión de usuarios y permisos en AppSheet

usuarios y permisos appsheet

IMAGEN 2 La gestión de usuarios y permisos en AppSheet

tabla usuarios y roles appsheet

IMAGEN 3

tabla usuarios appsheet

IMAGEN 4 La gestión de usuarios y permisos en AppSheet

user settings appsheet

IMAGEN 5 La gestión de usuarios y permisos en AppSheet

show if appsheet

IMAGEN 6 La gestión de usuarios y permisos en AppSheet

table settings appsheet
permisos tablas, solo lectura, actualización, añadir registros, borrar registros.

IMAGEN 7 La gestión de usuarios y permisos en AppSheet

switch usuarios y permisos

IMAGEN 8

share app appsheet

IMAGEN 9

usersettings appsheet
Carrito de compra