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.
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.
Entendendo os papéis do usuário no WordPress
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.
A solução: mapeamento de papéis personalizado
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.
Pré-requisitos
Antes de prosseguir, certifique-se de ter o seguinte:
- Concluir o artigo anterior sobre a integração do Logto com o WordPress para autenticação, isto inclui:
- Um site WordPress com acesso de administrador.
- Uma conta Logto com uma aplicação configurada para o seu site WordPress.
- O plugin OpenID Connect Generic instalado e configurado em seu site WordPress.
- Configurar papéis no Logto que correspondam aos papéis no WordPress. Por exemplo, se você tem um papel 'editor' no WordPress, crie um papel 'group:editors' no Logto.
Implementando o mapeamento de papéis com código personalizado
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:
Passo 1: acesse o arquivo functions.php do seu tema
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.
Passo 2: escreva a função de mapeamento de papéis
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.
Passo 3: entendendo o código e personalizando-o
-
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 comoopenid-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çãologto_handler
à açãowp_login
, que é acionada após um usuário fazer login. O10
é a prioridade (padrão) e o2
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.
Passo 4: teste sua configuração
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.
Conclusão
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.