Integrando com WordPress para Autorização
A segunda parte da série sobre a integração do Logto com o WordPress, focada na autorização.
A segunda parte da série sobre a integração do Logto com o WordPress, focada na autorização.
No artigo anterior, discutimos como integrar o Logto para autenticação no WordPress. Este artigo, como a segunda parte, irá aprofundar no processo de autorização, focando no sistema de papéis no WordPress e como implementar o mapeamento de papéis com o Logto, dado que o plugin que usamos no artigo anterior não fornece diretamente capacidades de autorização.
Vamos criar uma função de mapeamento de papéis que atribui automaticamente os papéis do WordPress aos usuários com base em seus papéis fornecidos pelo RBAC (Controle de Acesso Baseado em Papéis) do Logto.
O WordPress possui um sistema incorporado de gerenciamento de papéis do usuário que define quais ações (capacidades) um usuário pode realizar em um site. Os papéis do usuário padrão incluem Administrador, Editor, Autor, Contribuinte e Assinante, cada um com seu próprio conjunto de capacidades
Esses papéis são cruciais para manter a segurança e a eficiência das operações do site, pois ajudam a garantir que os usuários tenham níveis de acesso apropriados com base em suas responsabilidades.
O Logto emprega Controle de Acesso Baseado em Papéis (RBAC) como seu modelo de autorização, utilizando "escopos" como a menor unidade de permissão. Esses escopos definem as ações específicas que um usuário autenticado tem permissão para realizar dentro de uma aplicação. No entanto, o WordPress opera em um princípio diferente para o gerenciamento das permissões do usuário, confiando nos "papéis" pré-definidos que agrupam várias capacidades.
Dada essa diferença fundamental, sugerimos a criação de papéis especiais dentro do Logto que correspondam aos papéis definidos no WordPress. Esses papéis podem não ter nenhum escopo, eles são usados apenas como referência para o mapeamento de usuários para os papéis do WordPress.
Antes de prosseguir, certifique-se de ter o seguinte:
Para implementar o mapeamento de papéis, vamos adicionar código personalizado ao arquivo functions.php do tema do WordPress. Isso envolve o uso do gancho de açãowp_login, que é acionado quando um usuário faz login. Aqui está um guia passo a passo de como configurar isso:
Abra o arquivofunctions.php do seu tema. Você pode acessar este arquivo através do painel de administração do WordPress navegando até Aparência > Editor de Tema e selecionando o arquivo functions.php na lista de arquivos à direita. Ou no código fonte, navegue até o diretório do tema do WordPress e localize o arquivo functions.php. Este arquivo permite que você adicione funções PHP personalizadas que ampliam a funcionalidade do seu site WordPress.
Abaixo está um exemplo simples de uma função que você pode adicionar ao functions.php. Essa função será acionada no login do usuário e atribuirá papéis com base na reivindicação papéis do usuário obtida do Logto.
Função logto_handler: Esta função recebe dois parâmetros: $user_login (nome do usuário) e $user (objeto do usuário). Ela recupera os papéis do Logto armazenados nos metadados do usuário como openid-connect-generic-last-user-claim, mapeia esse papel para um papel correspondente do WordPress e o atribui ao usuário.
add_action: Esta linha conecta a função logto_handler à ação wp_login, que é acionada após um usuário fazer login. O 10 é a prioridade (padrão) e o 2 indica o número de argumentos que a função aceita.
O exemplo acima atribui o papel de 'editor' aos usuários autenticados via Logto com o nome de papel group:editors. No entanto, em um cenário do mundo real, você provavelmente precisará implementar mais tipos de mapeamento de funções.
Você pode encontrar a lista de papéis do WordPress e suas capacidades aqui.
Agora, vamos testar a função de mapeamento de papéis fazendo login com um usuário que tem o papel group:editors no Logto. Após o login, verifique o papel do usuário no WordPress para garantir que o mapeamento esteja funcionando corretamente.
Integrando o Logto com o WordPress para autenticação e autorização, você pode realçar a segurança e a funcionalidade do seu site. Lembre-se, embora o código fornecido aqui seja um exemplo básico, você pode precisar adaptá-lo para se adequar à estrutura de papéis e permissões do seu site WordPress.