feat: versión inicial de GLM Hub
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
# GLM Hub — Solicitudes de acceso
|
||||
|
||||
## Cambios incluidos
|
||||
|
||||
- Se retiró el texto de ayuda **“Directa y fácil de escanear.”** debajo de Descripción breve.
|
||||
- **Control del catálogo** sigue renderizándose exclusivamente para usuarios con `role = admin`.
|
||||
- Los usuarios normales ven una nueva sección **¿No tienes acceso a una aplicación?**.
|
||||
- El formulario de solicitud se alimenta directamente del catálogo publicado en Supabase, por lo que al crear, ocultar o eliminar aplicaciones el dropdown se actualiza sin editar código.
|
||||
- La pantalla queda bloqueada mientras n8n registra la solicitud y envía los correos.
|
||||
- Los correos de aprobación se envían individualmente a Isaac Aracena, José Leopoldo Gómez y Máximo Gómez.
|
||||
- La primera decisión confirmada queda registrada de forma atómica en Supabase. Los clics posteriores no pueden cambiarla ni volver a avisar a IT Support.
|
||||
- Tras la decisión se envía un correo HTML a `itsupport@gomezleemarketing.com` con solicitante, aplicación, decisión y persona que decidió.
|
||||
|
||||
## 1. Supabase
|
||||
|
||||
Ejecuta completo:
|
||||
|
||||
`SUPABASE-GLM-HUB-COMPLETO.sql`
|
||||
|
||||
El script conserva las tablas anteriores y agrega:
|
||||
|
||||
- `glm_hub_access_requests`
|
||||
- `glm_hub_access_request_approvers`
|
||||
- `glm_hub_prepare_access_request(uuid)`
|
||||
- `glm_hub_issue_access_request_tokens(uuid)`
|
||||
- `glm_hub_decide_access_request(text, text)`
|
||||
|
||||
La función que entrega los enlaces de aprobación solo puede ejecutarse con `service_role`; los enlaces nunca se devuelven al navegador del solicitante.
|
||||
|
||||
## 2. n8n
|
||||
|
||||
Importa:
|
||||
|
||||
`n8n/GLM-Hub-Solicitudes-Acceso-Aprobacion.json`
|
||||
|
||||
Después configura:
|
||||
|
||||
1. En **Crear solicitud en Supabase** reemplaza `TU_SUPABASE_ANON_KEY` en `apikey`.
|
||||
2. En **Emitir enlaces de aprobación** reemplaza `TU_SUPABASE_SERVICE_ROLE_KEY` en `apikey` y `Authorization`.
|
||||
3. En **Registrar decisión en Supabase** reemplaza `TU_SUPABASE_ANON_KEY` en `apikey` y dentro de `Bearer TU_SUPABASE_ANON_KEY`.
|
||||
4. Selecciona una credencial Gmail válida en:
|
||||
- **Enviar solicitud a aprobadores**
|
||||
- **Enviar decisión a IT Support**
|
||||
5. Guarda, publica y activa el workflow.
|
||||
|
||||
El workflow no usa variables de entorno de n8n.
|
||||
|
||||
## 3. Frontend
|
||||
|
||||
El `.env` ya incluye:
|
||||
|
||||
```env
|
||||
VITE_ACCESS_REQUEST_WEBHOOK_URL="https://agenteit.digitalcompass.agency/webhook/glm-hub-solicitar-acceso"
|
||||
```
|
||||
|
||||
El ZIP también contiene un `dist` actualizado. La versión fuente puede recompilarse normalmente con:
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Decisión desde correo
|
||||
|
||||
Los botones del correo abren una pantalla de confirmación antes de registrar la decisión. Esto evita que un escáner automático de enlaces de Gmail o seguridad corporativa apruebe o rechace una solicitud sin intervención humana.
|
||||
|
||||
Los botones permanecen visibles en los correos ya entregados, pero después de la primera decisión Supabase bloquea cualquier cambio posterior y muestra que la solicitud ya fue atendida.
|
||||
|
||||
|
||||
## Corrección 2026-07-29
|
||||
|
||||
- El nodo **Crear solicitud en Supabase** usa la clave `anon` en `apikey` y el JWT vigente del usuario en `Authorization`.
|
||||
- Los nodos internos para emitir enlaces y registrar decisiones conservan la clave `service_role`.
|
||||
- Los errores visibles en el portal son mensajes para usuarios; los detalles técnicos quedan solamente en la ejecución de n8n.
|
||||
- El selector de áreas incluye **CDC**.
|
||||
Reference in New Issue
Block a user