Saltar al contenido
Banco de tareas

SEG-018SeguridadMejora

Quitar a los roles de la API los permisos de escritura que no usan

Dificultad
Avanzada
Estimación
1d
Estado
Abierta
Habilidades
postgressupabase-rls

Zona sensible. Toca permisos, datos personales, el mapa, secretos o la identidad de marca. Necesita revisión de la titular y conviene haber completado alguna tarea antes.

Contexto

La migración 20261007000000_permisos_explicitos.sql copió tal cual los permisos que Supabase daba por defecto: anon y authenticated conservan insert, update y delete sobre tablas como auditoria, avales, intentos_aval, verificadas, moderadoras o xp_libro. Hoy no pasa nada porque RLS lo bloquea todo (comprobado en producción el 7-oct-2026), pero RLS es la única barrera. Si alguien desactiva RLS en una tabla desde el panel, por error o con una cuenta robada, esa tabla queda abierta a cualquiera con la clave pública.

Qué hacer

  1. Para cada tabla, listar qué operaciones usa de verdad cada rol: políticas RLS existentes, llamadas desde src/, y funciones security invoker que escriben con el rol de quien llama.
  2. Migración nueva que revoque lo que sobra (por ejemplo, revoke insert, update, delete on auditoria, avales, intentos_aval from anon, authenticated). Las funciones security definer siguen escribiendo.
  3. Ampliar tests/db/permisos.test.ts: con RLS desactivado a propósito en la base de prueba, anon sigue sin poder escribir en las tablas sensibles.
  4. Aplicar en producción con npm run db:aplicar y pasar npm run instancia:comprobar.

Criterios de aceptación

  • Ninguna tabla sin política de escritura para anon le da a anon el permiso de escribir.

  • npm test y npm run e2e:real en verde.

  • npm run instancia:comprobar en verde tras aplicar la migración.

  • La titular revisa el PR.

Archivos

¿Te la quedas?

  1. 1. Haz un fork y crea la rama tarea/SEG-018-quitar-a-los-roles-de-la-api-los-permiso.
  2. 2. En tareas/seguridad/SEG-018-quitar-a-los-roles-de-la-api-los-permisos-de-escr.md, cambia la cabecera:
    estado: reservada
    asignada: tu_usuario_de_github
  3. 3. Abre un PR con ese cambio (commit firmado: git commit -s). Al fusionarse, es tuya durante 14 días.

Todo lo demás