Português (Portugal)
  • oidc
  • wordpress

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.

Sijie
Sijie
Developer

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 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.

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.