Skip to content

Atribuindo líderes e pastores de unidade

Existem duas coisas distintas que você pode querer dizer quando diz "Jane lidera a Filial Norte". O GCM as armazena em duas tabelas diferentes e elas fazem trabalhos muito diferentes.

  1. Líder de uma unidade — o nome de um único membro aparece no cartão herói da unidade, no badge de líder e nos relatórios. Armazenado em org_units.leader_member_id.
  2. Usuário com escopo em uma unidade — o login de um usuário fica restrito a ver apenas os dados em (e abaixo de) aquela unidade. Armazenado em user_unit_assignments_v2.

Um líder é uma relação de exibição. Um escopo de usuário é uma relação de segurança. Eles costumam ser a mesma pessoa, mas não precisam ser — e quando não são, você vai ver o valor da separação.

Popover Definir líder

Definindo um líder

Na árvore organizacional, cada linha de unidade tem um botão Definir líder à direita do nome (ou Trocar líder se um já está atribuído). Clique nele para abrir um pequeno popover com uma busca de membro.

  • Digite dois caracteres para disparar o RPC search_members.
  • Escolha um resultado para gravar leader_member_id na unidade.
  • Um toast confirma; a linha atualiza imediatamente com o novo nome e um pequeno avatar.
  • Para limpar, abra o popover em uma unidade que já tem um líder e clique em Remover líder.

O botão usa um contorno âmbar suave quando nenhum líder está atribuído, atraindo seu olhar para as lacunas. Em árvores grandes, é assim que você identifica células sem equipe sem rolar.

O que definir um líder faz:

  • O nome + avatar do líder aparece no cartão da unidade, no herói de detalhes da unidade e em cada lugar onde a unidade é mencionada em relatórios.
  • A foto do líder e o anel de status perdido/ativo renderizam via o componente compartilhado MemberAvatar, então um líder que ficou "perdido" recebe uma pista visual.
  • A view unit_with_leader alimenta a razão "líderes atribuídos" na página de nível (por exemplo, "2 / 7 líderes atribuídos").
  • Não muda o que o login de usuário desse membro pode ver. Essa é a próxima seção.

Restringindo um usuário a uma unidade

Essa é a metade de segurança. Uma conta de usuário (não um registro de membro) recebe uma linha em user_unit_assignments_v2 por unidade que você concede a ela. O escopo visível dela é a união das unidades atribuídas e todos os descendentes.

Onde definir

Vá em Usuários e funções → Usuários, encontre a linha e clique em Editar atribuições. O seletor mostra sua hierarquia completa com caixas de seleção. Marque cada unidade que ele deve ver.

Um padrão típico:

  • Um admin da organização tem zero linhas na tabela — vê tudo.
  • Um pastor regional tem uma linha no nível 1 (uma região). Ele vê as filiais, centros, células e membros daquela região.
  • Um pastor de célula tem uma linha no nível 3 (uma célula). Ele vê só sua célula.
  • Um diretor de louvor multi-campus tem duas linhas no nível 2. Ele vê as subárvores dos dois campi.

Como o escopo é aplicado

Quando um usuário não admin está logado, o frontend chama um RPC Postgres chamado user_visible_unit_ids que percorre a árvore e retorna cada id de unidade que ele pode tocar. O hook useUnitScope cacheia o resultado por 2 minutos.

Cada página de lista no GCM filtra por org_unit_id IN (visible_unit_ids) antes de renderizar. Políticas de RLS nas tabelas subjacentes fazem o mesmo. Um pastor que edita as requisições de rede do navegador não consegue puxar linhas fora do escopo — o banco as recusa.

Padrão fail-closed

Se o RPC falhar ou ainda não tiver retornado, o hook trata o escopo como vazio em vez de aberto. Um soluço de rede não vai acidentalmente mostrar a um pastor os dados do pastor sênior — ele só vai ver uma lista vazia até o RPC resolver.

Quando o líder e o escopo de usuário divergem

Casos comuns em que esses dois intencionalmente não são a mesma pessoa:

  • O líder de um pequeno grupo é o pastor reconhecido que você anunciaria do púlpito, mas ele não usa o app. Nenhuma linha user_unit_assignments_v2 existe para ele.
  • Um assistente administrativo tem escopo de usuário para inserir dados em uma filial, mas não é o líder público. Ele recebe uma linha user_unit_assignments_v2, mas leader_member_id aponta para o pastor.
  • Um pastor regional é o líder de sua região (nível 1) e tem escopo de usuário nesse nível também. Os dois registros batem. Esse é o caso mais comum.

O GCM nunca auto-sincroniza os dois. Definir um líder não cria uma linha de escopo de usuário, e dar a um usuário um escopo não o define como líder. Você faz as duas chamadas deliberadamente.

O nível mais estreito

Quando um usuário tem atribuições em múltiplos níveis, o GCM escolhe o mais estreito (índice de nível com maior número) como o filtro padrão em seletores em cascade. Isso significa que um usuário atribuído a uma região e a uma célula específica usa por padrão a visão de célula, com um interruptor manual para ampliar.

useUnitScope expõe isso como narrowestLevel. Seletores acima desse nível podem ficar travados na única atribuição do usuário se ele só tem uma nesse nível.

Visão geral de permissões

AçãoAdminPastor regionalPastor de célulaMembro
Atribuir um líder a uma unidadesimdentro do escoponãonão
Definir escopo de usuário para uma unidadesimdentro do escoponãonão
Ver membros da unidadeglobaldentro do escopodentro do escoposó os próprios
Ver presença da unidadeglobaldentro do escopodentro do escoposó os próprios
Ver doações da unidade (se não travadas por privacidade)globaldentro do escopoconfigurávelsó as próprias

"Dentro do escopo" significa que o usuário só pode tocar unidades que estão na própria subárvore visível dele. Ele pode conceder um escopo não mais amplo que o próprio.

Perguntas comuns

Um líder pode ver a lista de membros da sua unidade mesmo sem escopo de usuário? Só se a conta de usuário dele tiver escopo. Definir leader_member_id em um membro não concede a ele um login ou um escopo. Se ele não tem login ainda, convide-o via Usuários e funções e escolha a unidade durante o fluxo de convite — o GCM cria a linha user_unit_assignments_v2 para você.

E se eu atribuir um líder que não é membro? Você não pode. O seletor de líder só mostra membros existentes. Adicione-o como membro primeiro.

Arquivar uma unidade limpa seu líder? Não — o leader_member_id fica. Quando a unidade é restaurada, o líder ainda está anexado. Arquivar também não remove linhas de escopo de usuário; unidades restauradas voltam totalmente conectadas.

O mesmo membro pode liderar várias unidades? Sim. Não há restrição de unicidade em leader_member_id. Um pastor pode liderar uma região e uma célula ao mesmo tempo — comum quando um pastor sênior também conduz um grupo de discipulado.

Próximos passos