Informe de ejemplo con datos ficticios.

← Volver

Informe de revisión

Proyecto
corredores-crm
Commit probado
a3f9c21
Fecha
2026-10-15
Entorno
Reconstruido desde el repositorio · Chromium escritorio · datos ficticios

Resumen

Tu app funciona en lo principal: crear y editar clientes se guarda correctamente. Encontramos un problema grave: Pedro (Usuario B) puede ver y editar los clientes de Ana (Usuario A). Arregla eso primero.

1 · Falló1 · Sospecha3 · Pasó1 · No verificado

Recorridos y comprobaciones

  • Pasó

    Registro e inicio de sesión

    Con confirmación por correo capturada en el entorno de prueba.

  • Pasó

    Crear y editar un cliente

    El cambio sigue ahí al recargar y en una sesión nueva.

  • Falló

    Usuario B con los clientes de Usuario A

    Pedro ve y edita un cliente de Ana, también por API.

  • Pasó

    Visitante sin sesión

    No accede a rutas ni datos privados.

  • Sospecha

    Tabla de notas sin protección por fila

    Indicio en el código; no se confirmó ejecutando.

  • No verificado

    Cobro real con tarjeta

    Fuera de alcance: se usó un servicio simulado.

Hallazgo 1Falló

Pedro (Usuario B) puede ver y editar los clientes de Ana (Usuario A)

Severidad:
Alta
Confianza:
Alta · ejecutado

Impacto

Cualquier corredor puede ver la cartera completa de otro y cambiar sus etapas de venta.

Precondiciones y rol

Dos corredores con sesión iniciada. Ana tiene el cliente “Inmobiliaria Sol”.

Pasos para reproducirlo

  1. 1Iniciar sesión como Ana y crear el cliente “Inmobiliaria Sol”.
  2. 2Cerrar sesión e iniciar como Pedro.
  3. 3Abrir “Mis clientes”: aparece “Inmobiliaria Sol”.
  4. 4Cambiar su etapa a “cerrado” y recargar: el cambio queda guardado en el cliente de Ana.

Esperado

Pedro solo ve y edita sus propios clientes; la API rechaza el cambio.

Observado

La lista de Pedro incluye clientes de Ana y la API acepta el cambio (204).

Evidencia

GET /rest/v1/clients · Pedro
200 OK · 2 filas, 1 de Ana
[{ "id": "c_01…", "name": "Inmobiliaria Sol", "user_id": "<A>" }, …]
PATCH /rest/v1/clients?id=eq.c_01… · Pedro
204 No Content · stage: "negociación" → "cerrado"
SELECT stage FROM clients WHERE id = 'c_01…'
"cerrado"

Ubicación técnica

supabase/migrations/20260901_clients.sql · política “Authenticated can read clients”

Hipótesis de causa

La política de la tabla permite leer y escribir a cualquier usuario con sesión (condición true), sin comparar user_id con el usuario actual. Es una hipótesis, no una conclusión.

Prompt para corregirlo

Pégalo en Claude, Cursor, Lovable, Bolt u otra herramienta.

En mi app, los corredores pueden ver y editar los clientes de otros corredores.
Corrige el acceso a la tabla "clients" para que cada usuario solo pueda leer y modificar sus propios registros (user_id = auth.uid()), tanto desde la interfaz como llamando a la API directamente.
- Crea una migración nueva; no edites migraciones anteriores.
- Si existe un rol administrador que deba ver todo, conserva ese acceso con una política aparte.
- No cambies otras tablas ni otras funciones de la app.
- Al terminar, explica qué cambiaste para que yo pulse "Volver a probar" en UserB.

¿Te sirvió este hallazgo?

Usa la re-ejecución incluida. En este ejemplo no se ejecuta nada.