# US-MGN-001-004-002: Schema-Level Isolation (RLS + Dynamic Schema)

**RF Asociado:** [RF-MGN-001-004](../../02-modelado/requerimientos-funcionales/mgn-001/RF-MGN-001-004-multi-tenancy.md)
**Módulo:** MGN-001 - Fundamentos
**Epic:** Multi-Tenancy
**Prioridad:** P0 (MVP)
**Story Points:** 5
**Sprint:** Sprint 3
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story

**Como** sistema,
**Quiero** aislar datos de tenants usando schemas de PostgreSQL + RLS,
**Para** garantizar que ningún tenant pueda acceder a datos de otro tenant.

---

## Criterios de Aceptación

### Escenario 1: Queries automáticamente filtradas por tenant
**Cuando** usuario de tenant "acme" ejecuta SELECT * FROM sales.orders,
**Entonces** sistema ejecuta query en schema "tenant_acme", solo retorna datos de ese tenant.

### Escenario 2: RLS policies bloquean cross-tenant access
**Cuando** intento directo de acceso con tenant_id incorrecto,
**Entonces** RLS policy bloquea retornando 0 resultados.

---

## Reglas de Negocio

- **RN-1:** Cada tenant tiene schema aislado: tenant_{subdomain}
- **RN-2:** Middleware establece search_path al schema del tenant
- **RN-3:** RLS policies adicionales por seguridad (defense in depth)

---

## Tareas Técnicas

### Backend
- [ ] Middleware: extraer tenant del JWT/subdomain, SET search_path
- [ ] Crear RLS policies en todas las tablas
- [ ] TenantContext service para gestionar contexto actual
- [ ] Tests de isolation (10 casos)

---

## Estimación: 5 SP (9 horas)

---

## Referencias

- [RF-MGN-001-004](../../02-modelado/requerimientos-funcionales/mgn-001/RF-MGN-001-004-multi-tenancy.md)
