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.
La segunda parte de la serie sobre la integración de Logto con WordPress, centrándose en la autorización.
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.
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.
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.
Antes de continuar, asegúrese de tener lo siguiente:
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:
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.
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.
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í.
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.
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.