erp-core/docs/05-user-stories/mgn-001/US-MGN-001-008-001-rls-policies.md

1.8 KiB

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

RF Asociado: RF-MGN-001-008 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