paint-brush
Cómo implementé la aprobación de acceso en nuestro proyecto de código abiertoby@hacker6428749

Cómo implementé la aprobación de acceso en nuestro proyecto de código abierto

9m2024/07/25
Read on Terminal Reader

Makaut Buddy, una plataforma para compartir notas para estudiantes universitarios, enfrentó desafíos a la hora de gestionar las cargas de los usuarios de forma segura. Este artículo explica cómo la implementación del control de acceso basado en roles (RBAC) mediante Permit.io resolvió el problema, garantizando que solo los usuarios autorizados puedan cargar contenido, mejorando así la seguridad de la plataforma.
featured image - Cómo implementé la aprobación de acceso en nuestro proyecto de código abierto
undefined HackerNoon profile picture
0-item
1-item


Hace unos días, algunos de mis colegas se acercaron a mí con respecto a un problema con una aplicación de código abierto llamada Makaut Buddy , que es una plataforma para compartir notas diseñada para nuestra universidad, cuyo objetivo es ayudar a los estudiantes a compartir notas importantes, preguntas de exámenes anteriores y tutoriales de YouTube de manera eficiente. .


Si bien habían desarrollado con éxito un sistema para cargar recursos, se encontraron con el desafío de garantizar que solo las personas autorizadas pudieran cargar contenido.


Como se muestra en la demostración a continuación, cualquier usuario puede crear un recurso después de registrarse. Esto planteó un gran problema porque no podíamos regular lo que subían los usuarios, algunos incluso podrían haber subido contenido dañino o perturbador.

Inicialmente, definieron una función de administrador y otorgaron privilegios administrativos a un grupo selecto de personas. Sin embargo, a medida que aumentó el número de funciones, el código se volvió cada vez más complejo y difícil de gestionar.


Fue entonces cuando tuve la idea de escribir este artículo para crear conciencia sobre formas eficientes de administrar la autorización utilizando un modelo de control de acceso basado en roles (RBAC) con la ayuda de herramientas de autorización de terceros como Permit.


Además de implementar RBAC, también introdujimos un sistema de aprobación de acceso a solicitudes. Este sistema garantiza que cualquier usuario que quiera subir contenido primero debe solicitar acceso, que luego un administrador puede aprobar o denegar. Esta capa adicional de seguridad nos ayuda a mantener la integridad del contenido en Makaut Buddy.


En este artículo, he utilizado JavaScript como lenguaje de programación y Next.js como marco. Sin embargo, los conceptos que se analizan aquí no son específicos del lenguaje y puede implementarlos en su lenguaje de programación preferido.


Al final de este artículo, sabrá cómo implementar un modelo RBAC básico en su aplicación.


Dicho esto, ¡vamos a sumergirnos!


¿Qué es la autorización?

¿Recuerdas esas mañanas corriendo a la escuela? El guardia de seguridad que verifica su identificación es un ejemplo perfecto de autenticación. Están verificando tu identidad como estudiante permitido en el campus. Pero ese es sólo el primer paso. Incluso después de ser identificado, no entrarías simplemente a ningún salón de clases, ¿verdad? Ahí es donde entra en juego la autorización.


Piense en su horario de clases como su autorización. Te otorga acceso a áreas específicas (aulas) según tu rol (estudiante matriculado en esa clase). No estaría autorizado a ingresar a la sala de profesores ni a la sección restringida de la biblioteca, aunque sea un estudiante (autenticado).


La diferencia entre Autenticación y Autorización es como preguntar "¿Quién eres?" vs "¿Qué puedes hacer?"

¿Por qué necesitamos un modelo RBAC para la autorización 🤔?

La autorización es importante en todas las organizaciones, ya que impide que las personas realicen acciones para las que no están autorizados. Esto garantiza la seguridad de la organización y ayuda a prevenir pérdidas.


Ilustremos la afirmación anterior con un ejemplo:

En una empresa, hay algunos ingenieros superiores con amplia experiencia y algunos pasantes que aún están aprendiendo los entresijos. Puede imaginarse el desastre que causaría si tanto el ingeniero senior como el pasante tuvieran el mismo nivel de permisos. Los becarios que aún están aprendiendo podrían, sin saberlo, cometer algún error por el que la empresa tendrá que pagar. En situaciones como estas, el modelo de control de acceso basado en roles funciona mejor porque los permisos no se asignan a personas individuales, sino que se asignan a roles. Por ejemplo, solo un ingeniero senior o un líder tecnológico puede eliminar recursos, mientras que todos los pasantes solo pueden ver y administrar recursos.


A continuación, veamos cómo podemos implementar RBAC en una aplicación.

Cómo implementar RBAC en una aplicación:

1. Definir funciones y permisos

Primero, necesitamos definir roles y asignar permisos a cada rol.

Nota: Un Rol es el puesto o propósito que alguien tiene en una organización, necesitamos roles para poder diferenciar entre individuos según los permisos o privilegios asignados a ese rol.

2. Asignar roles a los usuarios

Necesitamos una forma de asignar un rol a cada usuario de la aplicación. Generalmente esto se hace después de que el usuario se registra.

3. Cree una API de autorización

Necesitamos una API en nuestro backend que asuma la operación que un usuario desea realizar y verifique la autorización del usuario. El siguiente diagrama le dará una mejor comprensión:



Sin embargo, no vamos a implementar todo el modelo desde cero. En su lugar, utilizaremos una herramienta de autorización de terceros llamada Permit, que hará que todo el proceso de establecimiento de la autorización sea muy sencillo y eficiente para nosotros, para que usted pueda trabajar en las funciones que realmente importan.


El siguiente diagrama muestra cómo vamos a aprovechar Permit para implementar RBAC en nuestras aplicaciones:


Implementando el modelo RBAC

En esta sección, recorreremos los pasos para implementar el control de acceso basado en roles (RBAC) mediante Permit.


Paso 1: cree una cuenta de permiso y un espacio de trabajo

Como utilizamos un Permiso para establecer un modelo RBAC, primero debemos crear una cuenta de Permiso y un espacio de trabajo:


Paso 2: crear un recurso

Ahora necesitamos crear un Recurso que es la entidad a la que queremos controlar el acceso en nuestra aplicación.

Por ejemplo, en una aplicación para tomar notas, el recurso sería Notas y las acciones podrían ser Crear , Leer, Actualizar y Eliminar.


Para crear un recurso:

  1. Vaya a la sección Política.
  2. Navegue a la pestaña Recursos.
  3. Cree un nuevo recurso completando los detalles requeridos.



En el ejemplo anterior, el nombre del recurso es Notas y las acciones que el usuario puede realizar son Crear, Leer, Actualizar y Eliminar.

Paso 3: definir roles

Luego de crear el Recurso, tenemos que definir los roles que van a existir en nuestra aplicación.


En este caso, como la aplicación es una aplicación para compartir notas para una universidad, los roles van a ser:

  • Administrador: puede crear y leer recursos.
  • Estudiante: puede leer recursos.




Paso 4: asignar acciones a roles

Una vez que hemos creado ambos roles, ahora tenemos que asignar las acciones que puede realizar cada rol desde nuestro editor de políticas, como se muestra a continuación:


Paso 5: configurar las API de backend

Ahora que su cuenta Permit está configurada, puede comenzar a crear las API de backend para comunicarse con Permit. Usaremos el SDK de Node.js proporcionado por Permit. Puede encontrar el SDK para su lenguaje de programación preferido en la documentación del permiso.


Sincronizar usuarios y asignar roles predeterminados

Primero, debemos asegurarnos de que cada usuario que se registre en nuestra aplicación esté sincronizado con el directorio de permisos y tenga asignado un rol predeterminado de Estudiante.


Para hacer esto necesitamos crear una API backend como se muestra a continuación:

Esta API hace 2 cosas:

  • Inicializa la API de permiso.
  • Crea un nuevo usuario utilizando la API createUser .
  • Asigna un rol predeterminado mediante la API assignRole .



Puede leer más sobre todas las API que Permit proporciona en los documentos de permisos.


Obtener rol de usuario

A continuación, necesitamos crear una API de backend que obtenga el rol del usuario de Permit.io y lo envíe de regreso al frontend.

La API que se muestra a continuación hace que el usuario utilice permit.api.users.get(user_key)



Esta API obtiene el rol de usuario con el que podemos manipular nuestros componentes front-end para permitir que solo las personas que tienen roles especiales puedan verlo.


También puede consultar la función permit.check() para verificar si un usuario con un rol determinado tiene permiso para realizar una operación.

Con esto, hemos implementado con éxito un modelo RBAC utilizando Permit. Ahora podemos integrar las rutas de backend con el marco de frontend o biblioteca de su elección para completar la configuración.

Implementación del sistema de aprobación de acceso:

Para completar nuestra configuración, necesitamos un componente que permita a los usuarios solicitar actualizaciones de roles:

  • Un usuario normal sin privilegios de administrador puede ver el elemento de permiso y solicitar privilegios de administrador.



  • Un usuario administrador puede aprobar o rechazar solicitudes entrantes de actualizaciones de funciones de otros usuarios.


Paso 1: crear un elemento de permiso

Los elementos Permit son parte de "Permit Share-If", que es un conjunto de componentes de interfaz de usuario integrables y prediseñados que facilitan el acceso compartido en las aplicaciones. Diseñados para proporcionar un control de acceso totalmente funcional, hacen que delegar la gestión de permisos a sus usuarios sea sencillo y seguro.


  • Para implementar esto, primero necesitamos crear un elemento de permiso:
    • Vaya a la pestaña Elementos en el Panel de permisos.
    • Haga clic en Crear elemento en la sección Gestión de usuarios.



  • Luego tenemos que completar el formulario con la información requerida como se muestra a continuación.
    • Haga que el rol de administrador sea el propietario del espacio de trabajo.
    • Asigne el rol de Estudiante a la sección de espectador.
    • Establezca el rol predeterminado como Estudiante.



  • Guarde el elemento y cree un nuevo elemento en Solicitud de acceso:


  • Luego complete la Información para la Solicitud de Acceso
    • Seleccione el elemento de gestión de usuarios para conectar su elemento de solicitud de acceso.
    • Haga clic en Crear para finalizar el elemento.



  • A continuación, editaremos el elemento de gestión de usuarios.
    • Vuelva al elemento de gestión de usuarios y edítelo.
    • Seleccione el elemento de solicitud de acceso como componente de aprobación en la gestión de usuarios.



Eso es todo, hemos creado los elementos.

Paso 2: crear una API de backend para el inicio de sesión del usuario

Antes de usar los elementos, necesitamos crear una API de backend para que el usuario inicie sesión en el elemento de permiso.

Nota: Es importante que el usuario inicie sesión lo antes posible, preferiblemente inmediatamente después de registrarse.


Ahora, veamos el código:

Código API que se sirve en el punto final /api/v1/login_permit/?userkey=user_key :



Paso 3: Código frontend para implementar el inicio de sesión

El código de interfaz para implementar el inicio de sesión se verá así:



Eso es todo, hemos configurado nuestro código.

Paso 4: integrar iframes en el frontend

Ahora, solo necesitamos ir al panel de permisos y copiar tanto el iframe de administración de usuarios como el iframe de solicitud de acceso, como se muestra a continuación:



Ahora, una vez que tenemos el código, necesitamos agregar el iframe a nuestra interfaz donde queremos mostrar los elementos a nuestros usuarios, necesitamos:

  • Muestra el elemento de gestión de usuarios a los usuarios con rol de administrador.
  • Mostrar el elemento de solicitud de acceso a los usuarios con rol de estudiante.


Con esto, hemos configurado con éxito un sistema de aprobación de acceso donde los usuarios pueden solicitar actualizaciones de roles y los administradores pueden aprobar o rechazar estas solicitudes.


Demostración de RBAC en una aplicación para compartir notas

  • Demostración: acceso de administrador para cargar el widget

Esta demostración muestra cómo un usuario con el rol de "Administrador" puede acceder al widget de carga.



  • Demostración: Restricciones de roles de estudiantes y solicitud de acceso

Esta demostración ilustra cómo un usuario con el rol "Estudiante" no puede ver el widget de carga y puede solicitar una actualización al rol "Administrador":


  • Demostración: aprobación de la actualización de roles

Esta demostración muestra cómo los usuarios privilegiados pueden aprobar solicitudes de actualización de roles:


  • Demostración: acceso de función actualizado al widget de carga

Esta demostración demuestra cómo un usuario, después de ser actualizado de "Estudiante" a "Administrador", obtiene acceso al widget de carga.

Conclusión

¡Eso es todo!


Gracias por leer hasta aquí.


En este tutorial, exploramos la autorización y entendimos por qué la autorización es muy importante en cualquier aplicación. También analizamos cómo podemos configurar Permit para proteger la aplicación y controlar el acceso de los usuarios según sus roles.


Este artículo es sólo la punta del iceberg de la autorización y el modelo RBAC. Puede consultar ABAC y ReBAC para obtener una autorización más detallada.