Asignar líderes y pastores
Hay dos cosas distintas que podrías querer decir cuando dices "Jane lidera la Sede Norte". GCM las almacena en dos tablas diferentes y hacen trabajos muy diferentes.
- Líder de una unidad — el nombre de un solo miembro aparece en la tarjeta hero de la unidad, en la insignia de líder y en los reportes. Almacenado en
org_units.leader_member_id. - Usuario limitado a una unidad — el login de un usuario está restringido a ver solo la data en (y debajo de) esa unidad. Almacenado en
user_unit_assignments_v2.
Un líder es una relación de visualización. Un alcance de usuario es una relación de seguridad. A menudo son la misma persona, pero no tienen que serlo — y cuando no lo son, verás el valor de la separación.

Definir un líder
En el árbol organizacional, cada fila de unidad tiene un botón Definir líder a la derecha de su nombre (o Cambiar líder si ya hay uno asignado). Haz clic para abrir un pequeño popover con una búsqueda de miembros.
- Escribe dos caracteres para disparar el RPC
search_members. - Selecciona un resultado para escribir
leader_member_iden la unidad. - Un toast confirma; la fila se actualiza inmediatamente con el nuevo nombre y un pequeño avatar.
- Para limpiar, abre el popover en una unidad que ya tenga un líder y haz clic en Quitar líder.
El botón usa un contorno ámbar suave cuando no hay líder asignado, atrayendo tu vista a los huecos. En árboles grandes así es como detectas células sin personal sin tener que hacer scroll.
Qué hace definir un líder:
- El nombre y avatar del líder aparece en la tarjeta de la unidad, en el hero del detalle de la unidad, y en cada lugar donde la unidad se menciona en los reportes.
- La foto y el anillo de estado activo/perdido del líder se renderizan vía el componente compartido
MemberAvatar, así que un líder que se ha "perdido" obtiene una pista visual. - La vista
unit_with_leaderimpulsa la proporción "líderes asignados" en la página de nivel (ej. "2 / 7 líderes asignados"). - No cambia lo que el login del usuario de ese miembro puede ver. Eso es la siguiente sección.
Limitar un usuario a una unidad
Esta es la mitad de seguridad. Una cuenta de usuario (no un registro de miembro) recibe una fila en user_unit_assignments_v2 por cada unidad que le otorgues. Su alcance visible es la unión de sus unidades asignadas y cada descendiente.
Dónde definirlo
Ve a Usuarios y roles → Usuarios, encuentra la fila y haz clic en Editar asignaciones. El selector muestra tu jerarquía completa con casillas de verificación. Marca cada unidad que deba ver.
Un patrón típico:
- Un admin de organización tiene cero filas en la tabla — ve todo.
- Un pastor regional tiene una fila en el nivel 1 (una región). Ve las sedes, centros, células y miembros de esa región.
- Un pastor de célula tiene una fila en el nivel 3 (una célula). Ve solo su célula.
- Un director de alabanza multi-campus tiene dos filas en el nivel 2. Ve los subárboles de ambos campus.
Cómo se aplica el alcance
Cuando un usuario no admin inicia sesión, el frontend llama a un RPC de Postgres llamado user_visible_unit_ids que recorre el árbol y devuelve cada id de unidad que puede tocar. El hook useUnitScope cachea el resultado por 2 minutos.
Cada página de lista en GCM filtra por org_unit_id IN (visible_unit_ids) antes de renderizar. Las políticas RLS sobre las tablas subyacentes hacen lo mismo. Un pastor que edite las peticiones de red de su navegador no puede sacar filas fuera de su alcance — la base de datos las rechaza.
Fail-closed por defecto
Si el RPC falla o aún no ha devuelto, el hook trata el alcance como vacío en lugar de abierto. Un parpadeo de red no le mostrará accidentalmente a un pastor la data del pastor principal — solo verá una lista vacía hasta que el RPC se resuelva.
Cuando el líder y el alcance del usuario divergen
Casos comunes en los que intencionalmente no son la misma persona:
- El líder de un grupo pequeño es el pastor reconocido que anunciarías desde el púlpito, pero no usa la app. No existe una fila de
user_unit_assignments_v2para él. - Un asistente administrativo tiene alcance de usuario para ingresar data de una sede pero no es el líder público. Recibe una fila en
user_unit_assignments_v2peroleader_member_idapunta al pastor. - Un pastor regional es el líder de su región (nivel 1) y también tiene alcance de usuario en ese nivel. Los dos registros coinciden. Este es el caso más común.
GCM nunca sincroniza los dos automáticamente. Definir un líder no crea una fila de alcance de usuario, y dar a un usuario alcance no lo define como el líder. Haces ambas llamadas de manera deliberada.
El nivel más estrecho
Cuando un usuario tiene asignaciones en varios niveles, GCM elige el más estrecho (índice de nivel con número más alto) como su filtro por defecto en los selectores en cascada. Esto significa que un usuario asignado a una región y a una célula específica por defecto va a la vista de célula, con un toggle manual para ampliar.
useUnitScope expone esto como narrowestLevel. Los selectores por encima de ese nivel pueden quedar bloqueados a la única asignación del usuario si solo tiene una en ese nivel.
Resumen de permisos
| Acción | Admin | Pastor regional | Pastor de célula | Miembro |
|---|---|---|---|---|
| Asignar un líder a una unidad | sí | dentro del alcance | no | no |
| Definir alcance de usuario a una unidad | sí | dentro del alcance | no | no |
| Ver miembros de una unidad | global | dentro del alcance | dentro del alcance | solo el propio |
| Ver asistencia de una unidad | global | dentro del alcance | dentro del alcance | solo el propio |
| Ver donaciones de una unidad (si no está bloqueado por privacidad) | global | dentro del alcance | configurable | solo el propio |
"Dentro del alcance" significa que el usuario solo puede tocar unidades que estén en su propio subárbol visible. Puede otorgar un alcance no más amplio que el suyo.
Preguntas comunes
¿Puede un líder ver la lista de miembros de su unidad sin alcance de usuario? Solo si su cuenta de usuario tiene alcance. Definir leader_member_id a un miembro no le otorga un login ni un alcance. Si aún no tiene un login, invítalo vía Usuarios y roles y elige la unidad durante el flujo de invitación — GCM crea la fila de user_unit_assignments_v2 por ti.
¿Qué pasa si asigno a un líder que no es un miembro? No puedes. El selector de líder solo muestra miembros existentes. Agrégalo primero como miembro.
¿Archivar una unidad limpia su líder? No — el leader_member_id se queda. Cuando la unidad se restaura, el líder sigue adjunto. Archivar tampoco remueve las filas de alcance de usuario; las unidades restauradas vuelven totalmente conectadas.
¿Puede el mismo miembro liderar varias unidades? Sí. No hay una restricción de unicidad sobre leader_member_id. Un pastor puede liderar una región y una célula al mismo tiempo — común cuando un pastor principal también dirige un grupo de discipulado.
Próximos pasos
- Archivar y restaurar cuando la composición del equipo cambia.
- Lee el resumen de usuarios y roles para la vista del lado de gestión de usuarios.
- Invita a miembros del equipo y define su alcance en un solo flujo.
