Pular para o conteúdo principal

Configurar autorização com Permit.io

Permit.io é uma plataforma de autorização que fornece controle de acesso granular para aplicações. Você pode usar o Logto em conjunto com o Permit.io para gerenciar a autenticação e a autorização dos usuários.

dica:

Para entender as principais diferenças entre autenticação e autorização, veja Autenticação vs. autorização.

Este guia mostrará como conectar o Logto ao Permit.io para implementar autorização em sua aplicação.

Pré-requisitos

Integração

Instalar o SDK do Permit.io

Adicione o SDK do Permit.io à sua aplicação:

npm install permitio

Criar um projeto no Permit.io

  1. Cadastre-se para uma conta gratuita em permit.io
  2. Crie um novo projeto e obtenha sua chave de API
  3. Adicione a chave de API às variáveis de ambiente:
PERMIT_API_KEY=sua-chave-de-api-do-permit

Configurar o cliente Permit.io

Crie um arquivo para lidar com a integração do Permit.io:

// libraries/permit.js
const { Permit } = require('permitio');

// Inicialize o cliente Permit.io
const permit = new Permit({
pdp: 'https://cloudpdp.api.permit.io',
token: 'sua-chave-de-api-do-permitio',
});

// Sincronize um usuário com o Permit.io
export const syncUserToPermit = async (userId, email, firstName, lastName, role = 'viewer') => {
// Primeiro, sincronize o usuário
await permit.api.syncUser({
key: userId,
email: email || undefined,
first_name: firstName || undefined,
last_name: lastName || undefined,
});

// Em seguida, atribua um papel ao usuário
await permit.api.assignRole({
user: userId,
role: role,
tenant: 'default',
});

return true;
};

Criar um webhook Logto para registro de usuário

O Logto fornece webhooks que podem notificar sua aplicação quando eventos ocorrem. Usaremos o webhook PostRegister para sincronizar usuários com o Permit.io quando eles se cadastrarem.

Crie um endpoint de webhook em sua aplicação:

// pages/api/webhooks/logto.js
import { syncUserToPermit } from '../../../libraries/permit';

export default async function handler(req, res) {
// Registre o payload do webhook para depuração
console.log('Webhook payload:', req.body);

const { event, user } = req.body;

// Processa eventos de registro de usuário
if (event === 'PostRegister') {
try {
// Determine o papel do usuário (você pode implementar sua própria lógica aqui)
let role = 'viewer'; // Papel padrão

// Sincronize o usuário com o Permit.io
await syncUserToPermit(user.id, user.primaryEmail, user.name, undefined, role);

return res.status(200).json({ success: true });
} catch (error) {
console.error('Erro ao sincronizar usuário:', error);
return res.status(500).json({ error: 'Falha ao sincronizar usuário' });
}
}

return res.status(200).json({ message: 'Evento ignorado' });
}

Configurar o webhook no Logto Console

  1. Vá para a seção Webhooks no seu Logto Console
  2. Clique em "Criar Webhook"
  3. Dê um nome ao seu webhook
  4. Insira a URL do seu endpoint (por exemplo, https://seu-app.com/api/webhooks/logto)
  5. Selecione o evento PostRegister
  6. Salve o webhook
nota:

Para desenvolvimento local, você pode usar ferramentas como ngrok para expor seu servidor local para a internet.

Testar a sincronização de usuários

Para testar se os usuários estão sendo sincronizados corretamente:

  1. Crie uma nova conta de usuário em sua aplicação
  2. Verifique o painel do Permit.io em "Directory" → "Users" para confirmar se o usuário foi sincronizado
  3. Verifique se o papel correto foi atribuído ao usuário no cadastro
Usuários Logto sincronizados com o Permit.io com atribuição de papéis

Usar o Permit.io para autorização

Depois que os usuários estiverem sincronizados, você pode usar o Permit.io para checar permissões:

// Exemplo de verificação de permissão
const isPermitted = await permit.check(userId, 'view', 'reports');

if (isPermitted) {
// Usuário tem permissão para visualizar recursos
// Exiba a interface de recursos
} else {
// Usuário não tem permissão para visualizar recursos
// Exiba uma mensagem de acesso negado
}

Conclusão

Você conectou com sucesso o Logto ao Permit.io para sincronizar usuários automaticamente e implementar autorização em sua aplicação. Com essa integração:

  1. Usuários se autenticam pelo Logto
  2. Novos usuários são automaticamente sincronizados com o Permit.io via webhooks
  3. Você pode usar o Permit.io para checar permissões e implementar controle de acesso

Essa configuração fornece uma base sólida para implementar padrões de autorização mais avançados conforme sua aplicação cresce.

Para casos de uso de autorização mais avançados, explore a documentação do Permit.io sobre criação de políticas, aplicação de permissões e implementação de controle de acesso baseado em papel.