Pular para o conteúdo principal

Autenticação e Permissões

A API do ChurchApps usa autenticação baseada em JWT. Os usuários fazem login para receber um token que codifica sua identidade, associação à igreja e permissões. Esta página cobre o fluxo de autenticação, modelo de permissões e suporte a OAuth.

Fluxo de Login

Login Padrão

POST /membership/users/login

Auth: Público

Aceita um dos três tipos de credenciais:

CampoDescrição
email + passwordLogin padrão com email/senha
jwtReautenticar com um JWT existente
authGuidLink de autenticação único (usado em emails de boas-vindas/redefinição)

Resposta:

{
"user": {
"id": "abc-123",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@example.com"
},
"churches": [
{
"church": { "id": "church-1", "name": "First Church", "subDomain": "firstchurch" },
"person": { "id": "person-1", "membershipStatus": "Member" },
"groups": [{ "id": "group-1", "name": "Choir", "leader": false }],
"apis": [
{
"keyName": "MembershipApi",
"permissions": [
{ "contentType": "People", "action": "View" },
{ "contentType": "People", "action": "Edit" }
]
}
]
}
],
"token": "<jwt-token>"
}

O campo token é um JWT que deve ser enviado como Authorization: Bearer <token> nas requisições subsequentes.

Conteúdo do Token

O JWT codifica:

  • id — ID do Usuário
  • churchId — Igreja atualmente selecionada
  • personId — Registro de pessoa para a igreja selecionada
  • Arrays de permissões por API

Seleção de Igreja

Os usuários podem pertencer a múltiplas igrejas. A resposta de login inclui todas as igrejas com suas permissões. Para trocar de igreja, o cliente gera um novo JWT com escopo para uma igreja diferente a partir dos dados da resposta de login.

Registro de Usuário

Registrar um Novo Usuário

POST /membership/users/register

Auth: Público

{
"email": "jane@example.com",
"firstName": "Jane",
"lastName": "Doe",
"appName": "B1 Admin",
"appUrl": "https://app.b1.church"
}

Cria um usuário com uma senha temporária e envia um email de boas-vindas com um link de autenticação. O primeiro usuário registrado em uma nova instância recebe automaticamente acesso de administrador do servidor.

Registrar uma Nova Igreja

POST /membership/churches/add

Auth: JWT

Após registrar um usuário, chame este endpoint para criar uma igreja e associar o usuário a ela.

Gerenciamento de Senha

MétodoCaminhoAuthDescrição
POST/membership/users/forgotPúblicoEnviar email de redefinição de senha. Body: { "userEmail": "...", "appName": "...", "appUrl": "..." }
POST/membership/users/setPasswordGuidPúblicoDefinir nova senha usando um GUID de autenticação de um email de redefinição. Body: { "authGuid": "...", "newPassword": "..." }
POST/membership/users/updatePasswordJWTAlterar a senha do usuário atual. Body: { "newPassword": "..." }

Modelo de Permissões

As permissões são organizadas por módulo e atribuídas aos usuários através de papéis. Cada permissão tem um tipo de conteúdo e uma ação.

Referência de Permissões

Seção de ExibiçãoTipo de ConteúdoAçãoDescrição
PresençaAttendanceCheckinFazer check-in de membros nos cultos
AttendanceEditEditar registros de presença
ServicesEditGerenciar cultos e horários de culto
AttendanceViewVisualizar registros de presença
AttendanceView SummaryVisualizar resumos e relatórios de presença
DoaçõesDonationsEditCriar e editar registros de doações
SettingsEditEditar configurações de doações/pagamentos
DonationsView SummaryVisualizar relatórios resumidos de doações
DonationsViewVisualizar registros individuais de doações
Pessoas e GruposFormsAdminAdministração completa de formulários
FormsEditEditar definições de formulários
PlansEditEditar planos de culto
Group MembersEditAdicionar/remover membros de grupos
GroupsEditCriar e editar grupos
HouseholdsEditEditar atribuições de domicílios
PeopleEditEditar qualquer registro de pessoa
PeopleEdit SelfEditar apenas seu próprio registro de pessoa
RolesEditGerenciar papéis e atribuições de usuários
Group MembersViewVisualizar listas de membros de grupos
PeopleView MembersVisualizar apenas membros (não visitantes)
PeopleViewVisualizar todas as pessoas
RolesViewVisualizar papéis e atribuições
SettingsEditEditar configurações da igreja
ConteúdoContentEditEditar páginas, seções, elementos
SettingsEditEditar configurações de conteúdo
StreamingServicesEditGerenciar configuração de serviços de streaming
ChatHostHospedar/moderar sessões de chat
MensagensTextingSendEnviar mensagens de texto SMS

Como as Permissões São Verificadas

Nos controllers, as permissões são verificadas usando o método au.checkAccess():

// Exigir permissão específica
if (!au.checkAccess(Permissions.people.edit)) return this.json({}, 401);

// Ou dentro do actionWrapper — o sistema CRUD verifica automaticamente
crudSettings: {
permissions: {
view: Permissions.people.view,
edit: Permissions.people.edit
}
}

Administrador do Servidor

A permissão Server.Admin concede acesso total em todas as igrejas. Ela é atribuída ao primeiro usuário registrado e pode ser concedida a outros através do papel de administrador do servidor.

OAuth 2.0

A API suporta OAuth 2.0 para integrações de terceiros. Dois tipos de concessão estão disponíveis.

Fluxo de Código de Autorização

  1. Autorizar: POST /membership/oauth/authorize (JWT necessário)

    • Body: { "client_id": "...", "redirect_uri": "...", "response_type": "code", "scope": "...", "state": "..." }
    • Retorna: { "code": "...", "state": "..." }
  2. Trocar código por token: POST /membership/oauth/token (Público)

    • Body: { "grant_type": "authorization_code", "code": "...", "client_id": "...", "client_secret": "...", "redirect_uri": "..." }
    • Retorna: { "access_token": "...", "token_type": "Bearer", "expires_in": 43200, "refresh_token": "...", "scope": "..." }
  3. Renovar token: POST /membership/oauth/token (Público)

    • Body: { "grant_type": "refresh_token", "refresh_token": "...", "client_id": "...", "client_secret": "..." }

Os tokens de acesso expiram após 12 horas.

Fluxo de Código de Dispositivo (RFC 8628)

Para dispositivos sem navegador (apps de TV, quiosques):

  1. Solicitar código do dispositivo: POST /membership/oauth/device/authorize (Público)

    • Body: { "client_id": "...", "scope": "..." }
    • Retorna: { "device_code": "...", "user_code": "ABCD-1234", "verification_uri": "https://app.b1.church/device", "expires_in": 900, "interval": 5 }
  2. O usuário insere o código na URI de verificação e aprova ou nega

  3. Consultar por token: POST /membership/oauth/token (Público)

    • Body: { "grant_type": "urn:ietf:params:oauth:grant-type:device_code", "device_code": "...", "client_id": "..." }
    • Retorna authorization_pending até ser aprovado, depois retorna o token de acesso

Gerenciamento de Clientes OAuth

MétodoCaminhoAuthPermissãoDescrição
GET/membership/oauth/clientsJWTServer.AdminListar todos os clientes OAuth
GET/membership/oauth/clients/:idJWTServer.AdminObter cliente por ID
GET/membership/oauth/clients/clientId/:clientIdJWTObter cliente por client ID (segredo omitido)
POST/membership/oauth/clientsJWTServer.AdminCriar ou atualizar um cliente
DELETE/membership/oauth/clients/:idJWTServer.AdminExcluir um cliente

Endpoints de Aprovação de Dispositivo

MétodoCaminhoAuthDescrição
GET/membership/oauth/device/pending/:userCodeJWTObter informações do código de dispositivo pendente para a UI de aprovação
POST/membership/oauth/device/approveJWTAprovar uma autorização de dispositivo. Body: { "user_code": "...", "church_id": "..." }
POST/membership/oauth/device/denyJWTNegar uma autorização de dispositivo. Body: { "user_code": "..." }

Endpoints Públicos vs Autenticados

A API usa duas funções wrapper que determinam os requisitos de autenticação:

  • actionWrapper — Requer um JWT válido. O objeto de usuário autenticado (au) está disponível com churchId, userId e verificações de permissão.
  • actionWrapperAnon — Sem autenticação necessária. Usado para login, registro, consultas de conteúdo público e receptores de webhook.

Nas tabelas de endpoints ao longo desta documentação, esses são indicados como JWT e Público respectivamente na coluna Auth.

Páginas Relacionadas