Español
  • oidc
  • wordpress

Integración con WordPress para Autorización

La segunda parte de la serie sobre la integración de Logto con WordPress, centrándose en la autorización.

Sijie
Sijie
Developer

En el anterior artículo, discutimos cómo integrar Logto para autenticación en WordPress. Este artículo, como parte dos, se adentrará en el proceso de autorización, centrando en el sistema de roles en WordPress y cómo implementar el mapeo de roles con Logto, dado que el plugin que usamos en el artículo anterior no proporciona capacidades de autorización directamente.

Vamos a crear una función de mapeo de roles que asigna automáticamente los roles de WordPress a los usuarios basados en sus roles proporcionados por el RBAC (Control de Acceso Basado en Roles) de Logto.

Entendiendo los roles de usuario de WordPress

WordPress tiene un sistema de administración de roles de usuario incorporado que define qué acciones (capacidades) puede realizar un usuario en un sitio. Los roles de usuario predeterminados incluyen Administrador, Editor, Autor, Colaborador y Subscriptor, cada uno con su propio conjunto de capacidades.

Estos roles son cruciales para mantener la seguridad y eficiencia de las operaciones del sitio, ya que ayudan a garantizar que los usuarios tengan niveles de acceso apropiados basados en sus responsabilidades.

La solución: mapeo de roles personalizado

Logto emplea Control de Acceso Basado en Roles (RBAC) como su modelo de autorización, utilizando "alcances" como la unidad más pequeña de permiso. Estos alcances definen las acciones específicas que un usuario autenticado está permitido realizar dentro de una aplicación. Sin embargo, WordPress opera bajo un principio diferente para administrar los permisos de usuario, basándose en "roles" predefinidos que agrupan varias capacidades juntas.

Dada esta diferencia fundamental, sugerimos crear roles especiales dentro de Logto que correspondan a los roles definidos en WordPress. Estos roles pueden no tener ningún alcance, se utilizan solo como referencia para asignar usuarios a los roles de WordPress.

Prerrequisitos

Antes de continuar, asegúrese de tener lo siguiente:

  • Terminar el anterior artículo sobre la integración de Logto con WordPress para la autenticación, esto incluye:
    • Un sitio de WordPress con acceso de administrador.
    • Una cuenta de Logto con una aplicación configurada para tu sitio de WordPress.
    • El plugin OpenID Connect Generic instalado y configurado en tu sitio de WordPress.
  • Configurar roles en Logto que correspondan a los roles en WordPress. Por ejemplo, si tienes un rol de 'editor' en WordPress, crea un rol de 'group:editors' en Logto.

Implementando el mapeo de roles con código personalizado

Para implementar el mapeo de roles, vamos a agregar código personalizado al archivo functions.php del tema de WordPress. Esto implica el uso del gancho de acción wp_login, que se activa cuando un usuario inicia sesión. He aquí una guía paso a paso sobre cómo configurar esto:

Paso 1: accede al functions.php de tu tema

Abre el archivo functions.php de tu tema. Puedes acceder a este archivo a través del panel de administración de WordPress navegando a Apariencia > Editor de Tema y seleccionando functions.php de la lista de archivos del lado derecho. O en el código fuente, navega a tu directorio de temas de WordPress y localiza el archivo functions.php. Este archivo te permite agregar funciones PHP personalizadas que extiendan la funcionalidad de tu sitio de WordPress.

Paso 2: escribe la función de mapeo de roles

A continuación se muestra un ejemplo simple de una función que podrías añadir a functions.php. Esta función se disparará al iniciar sesión el usuario, y asignará roles basados en la reclamación de roles 'claims' del usuario obtenida de Logto.

Paso 3: entendiendo el código y personalizándolo

  • function logto_handler: Esta función toma dos parámetros: $user_login (nombre de usuario) y $user (objeto usuario). Recupera roles de Logto que se almacenaron en los metadatos del usuario como openid-connect-generic-last-user-claim, mapea este rol a un rol correspondiente de WordPress, y lo asigna al usuario.

  • add_action: Esta línea engancha la función logto_handler a la acción wp_login, que se dispara después de que un usuario inicia sesión. El 10 es la prioridad (por defecto), y el 2 indica el número de argumentos que la función acepta.

El ejemplo anterior asigna el rol de 'editor' a los usuarios autenticados mediante Logto con el nombre de rol group:editors. Sin embargo, en un escenario real, probablemente necesitarás implementar más tipos de mapeo de roles.

Puedes encontrar la lista de roles de WordPress y sus capacidades aquí.

Paso 4: prueba tu configuración

Ahora, vamos a probar la función de mapeo de roles iniciando sesión con un usuario que tiene el rol group:editors en Logto. Después de iniciar sesión, revisa el rol del usuario en WordPress para asegurarte de que el mapeo está funcionando correctamente.

Conclusión

Al integrar Logto con WordPress tanto para la autenticación como para la autorización, puedes mejorar la seguridad y funcionalidad de tu sitio. Recuerda, aunque el código proporcionado aquí es solo un ejemplo básico, es posible que necesites adaptarlo para ajustarse a la estructura de roles y permisos de tu sitio de WordPress.