En la mayoría de las aplicaciones, es necesario un control de acceso en función del rol del usuario. En esta lección, veremos un ejemplo de configuración de un control de este tipo para una aplicación web. Como parte de esta tarea, necesitarás:

  • Definir el rol del usuario
  • En función del rol, controlar la visualización de los elementos del menú de navegación
  • Imposibilitar la navegación a páginas no accesibles para un rol específico

Preparación inicial

Comencemos con la parte preparatoria. Para facilitar la configuración posterior, es necesario crear una variable global que almacenará información sobre el usuario actual. Así, si necesita hacer una comprobación, no necesitará contactar con el backend cada vez y solicitar información sobre el usuario. Será suficiente con leer los datos necesarios de la variable global.


Es necesario tener en cuenta las distintas opciones por las que un usuario autorizado puede entrar en la aplicación:

  • Entrar como resultado de una autorización exitosa en la página Login.
  • Inicio de sesión como resultado del registro.
  • Inicio de sesión directo a través de un enlace a una página específica para los usuarios que ya están autorizados.

En cada uno de estos casos, se utiliza una consulta backend que devuelve información sobre el usuario. En el proceso de negocio correspondiente, basta con añadir un bloque Set Variable bloque para registrar la variable global User_gv que creó anteriormente.

Este bloque se añade al CheckAuth proceso de negocio para usuarios autorizados, que se encuentra en la carpeta Prebuilt en la sección de procesos de negocio.

Para entrar a través de las páginas de inicio de sesión o registro, se añade el bloque a los procesos de negocio de los botones correspondientes.

Comprobemos el resultado en la página de inicio de la aplicación. Para ello, vamos a añadir un bloque Label que saludará al usuario por su nombre y, dependiendo del rol, escribirá si es administrador o no.

Es necesario configurar un proceso de negocio que se dispare cuando se muestre cualquier Label (Label onShow trigger).

  1. Expand User. Para obtener información sobre el nombre y las funciones del usuario.
  2. In Array. Para comprobar si el usuario en cuestión pertenece al Admins grupo.
  3. If-Else. Para variar las acciones en función de los resultados de la comprobación.
  4. Set Variable (String). Para crear una variable String con el valor "NOT " si el usuario no es miembro del Admins grupo o un valor vacío si lo es.
  5. Concat Strings (Multiple). Para crear una frase completa como "Hi, Ken. You are NOT Admin".
  6. Label Update Properties. Para la visualización final de esta frase en la página.

Si todo se hace correctamente, con cualquier variante de entrar en la página, la pantalla tendrá un resultado similar.

Control de visibilidad de los elementos del menú

Ahora es el momento de pasar a la parte principal. Vamos a crear una página destinada únicamente a los Admins y a añadir el correspondiente elemento de menú (Admin Page) para ir a ella. La mejor solución es desactivar su visibilidad por defecto.

Utilizando el bloque Navigate debe seleccionar la página creada en el parámetro Page y averiguar el ID de esta página.

En este ejemplo, sólo hay una página con acceso restringido, pero es mejor prever inmediatamente la opción cuando puede haber muchas páginas de este tipo y crear una variable global de sólo lectura para almacenar la lista de páginas.

A continuación, debe crear el proceso de negocio propiamente dicho (llamémoslo Set NavItem Visibility) para controlar la visibilidad de los elementos del menú de navegación.

  1. Expand User. Para obtener información sobre los roles de usuario.
  2. In Array. Para comprobar si el usuario dado está en el Admins grupo.
  3. For each loop. Para ejecutar el bucle para todas las páginas especificadas en la variable global.
  4. NavItem Update Properties. Para controlar la visibilidad de un elemento, en función de si el usuario es administrador.

El bloque del proceso de negocio creado debe añadirse antes de ir a la página de inicio en los procesos de negocio de los botones de inicio de sesión y registro de usuario (anteriormente, Set Variable se les añadían bloques para registrar una variable con información sobre el usuario actual).

Control de acceso mediante enlace directo

Lo último que hay que hacer es configurar un proceso de negocio que se ejecute cada vez que se lance la aplicación mediante el disparador "On app launch". Como en el paso anterior, añada el bloque Set NavItems Visibility para usuarios autenticados.

Además, es necesario proporcionar protección contra el acceso a una página cerrada a través de un enlace directo:

  1. In Array (Admin_pages). Para comprobar si la página de destino está en la lista de páginas sólo para administradores.
  2. If-Else. Para variar las acciones en función de los resultados de la comprobación. Si Falsepuede navegar a la página especificada. En el caso de True, se requiere una comprobación adicional del derecho a acceder a esta página.
  3. Expand User. Para leer la información del usuario de la variable global User_gv.
  4. In Array. Para comprobar la pertenencia al grupo Admins.
  5. If-Else. Para seleccionar acciones en función de la presencia o ausencia de derechos de administrador .
  6. Navigate. Para ir a la página requerida o redirigir a la página de inicio en caso de que un usuario sin los derechos apropiados intente abrir una página destinada sólo a administradores.

Las páginas seleccionadas están ahora protegidas contra el acceso no autorizado. En ausencia de derechos, no se muestran en el menú y no se puede acceder a ellas ni siquiera a través de un enlace directo.

Es importante recordar que la protección de acceso a determinadas páginas no implica la protección automática de los endpoints que se pueden utilizar en esas páginas. Para ello, si es necesario, en la Middleware Token Auth configuración, deberá especificar los grupos de usuarios que tienen derechos de acceso al endpoint seleccionado.

Was this article helpful?

AppMaster.io 101 Curso intensivo

10 Módulos
2 Semanas

¿No sabe por dónde empezar? Ponte en marcha con nuestro curso intensivo para principiantes y explora AppMaster de la A a la Z.

Inicio de curso
Development it’s so easy with AppMaster!

Necesitas más ayuda?

Resuelva cualquier problema con la ayuda de nuestros expertos. Ahorre tiempo y concéntrese en crear sus aplicaciones.

headphones

Soporte de contacto

Cuéntenos su problema y le encontraremos una solución.

message

Chat comunitario

Discutir preguntas con otros usuarios en nuestro chat.

Únete a la Comunidad