Skip to main content

security.mdc

Aislamiento multi-tenant y seguridad de la Shield API. Define cómo se separan los datos entre canales y cómo se protege el acceso.

Frontmatter

---
description: "Aislamiento multi-tenant y seguridad de la Shield API"
alwaysApply: true
---

Multi-tenancy basado en channel_id

Regla central

El aislamiento de datos se basa estrictamente en el campo channel_id. Cada canal (cliente B2B) tiene sus datos completamente segregados.

Filtrado obligatorio

Toda consulta a tablas de negocio DEBE incluir:

.eq('channel_id', channel_id)

Sin esta cláusula, el agente está produciendo código que viola la separación multi-tenant.

Ejemplo correcto

Mal — consulta sin filtro de canal:

const { data } = await supabase
.from('risk_items')
.select('*');

Bien — consulta con channel_id:

const { data } = await supabase
.from('risk_items')
.select('*')
.eq('channel_id', channel_id);

Shield API

Las rutas en /api/shield/** deben validar sesión y canal mediante el middleware global. Sin esta validación, una ruta queda expuesta sin control de tenant.

Row Level Security (RLS)

Cada nueva migración en supabase/migrations/ debe incluir RLS. Las tablas sin RLS son consideradas inseguras incluso si el código aplica filtros — el agente debe rechazar migraciones que omitan esta capa de defensa.