# US-MGN-001-008-001: Row Level Security (RLS) Policies

**RF Asociado:** [RF-MGN-001-008](../../02-modelado/requerimientos-funcionales/mgn-001/RF-MGN-001-008-record-rules-rls.md)
**Módulo:** MGN-001 - Fundamentos
**Epic:** Seguridad y Control de Acceso
**Prioridad:** P1 (Post-MVP)
**Story Points:** 8
**Sprint:** Sprint 5
**Fecha:** 2025-11-24

---

## User Story

**Como** sistema de seguridad,
**Quiero** aplicar políticas de Row Level Security (RLS) en PostgreSQL,
**Para** garantizar que usuarios solo puedan acceder a registros autorizados según reglas de negocio.

---

## Criterios de Aceptación

### Escenario 1: RLS filtra por tenant_id
**Cuando** usuario de tenant A ejecuta SELECT,
**Entonces** RLS policy filtra WHERE tenant_id = current_tenant_id.

### Escenario 2: RLS filtra por company_id (multi-empresa)
**Cuando** usuario solo tiene acceso a empresa A,
**Entonces** RLS filtra WHERE company_id IN (empresas_autorizadas).

### Escenario 3: RLS filtra por ownership (created_by_user_id)
**Cuando** regla indica "solo ver registros propios",
**Entonces** RLS filtra WHERE created_by_user_id = current_user_id.

---

## Reglas de Negocio

- **RN-1:** RLS es defense-in-depth (además de filtros en código)
- **RN-2:** Políticas RLS por tabla: tenant isolation, company access, ownership
- **RN-3:** Administradores pueden bypass RLS con SET ROLE

---

## Tareas Técnicas

- [ ] Crear RLS policies en todas las tablas transaccionales
- [ ] Policy: tenant_isolation (filtrar por tenant_id)
- [ ] Policy: company_access (filtrar por company_id)
- [ ] Policy: ownership_rule (filtrar por created_by_user_id)
- [ ] Tests de RLS (15 casos)

---

## Estimación: 8 SP

---

## Referencias

- [RF-MGN-001-008](../../02-modelado/requerimientos-funcionales/mgn-001/RF-MGN-001-008-record-rules-rls.md)
