# Rls Policy Optimizer

> Optimiza políticas RLS de Supabase usando el patrón (select auth.uid()) para mejor performance. Usa cuando trabajes con RLS policies, auth.uid() reevaluación, o tareas 1.3 y 2.1 del PLAN_MEJORAS.md.

- Skill: `majiayu000/rls-policy-optimizer` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/rls-policy-optimizer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/rls-policy-optimizer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/rls-policy-optimizer

---


# RLS Policy Optimizer

Skill para optimizar Row Level Security policies en Supabase evitando reevaluación de `auth.uid()` por cada fila.

## Problema

```sql
-- MALO: auth.uid() se evalúa por cada fila
USING (auth.uid() = user_id)
```

## Solución

```sql
-- BUENO: (select auth.uid()) se evalúa una vez
USING ((select auth.uid()) = user_id)
```

## Tablas Afectadas en este Proyecto

- `leads` - policies: Users insert/read/update
- `cotizaciones` - policies: Users insert/read
- `items_cotizacion` - policies: Users insert/read
- `email_logs` - policies: Admins manage

## Instrucciones

1. Usar MCP Supabase para obtener policies actuales de la tabla
2. Crear migración en `database/migrations/YYYYMMDD_optimize_rls_<tabla>.sql`
3. Incluir DROP POLICY + CREATE POLICY con el fix
4. Aplicar con `mcp_supabase_apply_migration`
5. Verificar con `mcp_supabase_get_advisors` type="performance"
6. Documentar en `docs/PLAN_MEJORAS.md`

## Template de Migración

```sql
-- Optimizar RLS: usar (select auth.uid()) en lugar de auth.uid()
-- Referencia: https://supabase.com/docs/guides/database/postgres/row-level-security#call-functions-with-select

-- Backup implícito: recreamos la policy con la misma lógica optimizada

DROP POLICY IF EXISTS "Users read own <tabla>" ON public.<tabla>;

CREATE POLICY "Users read own <tabla>" ON public.<tabla>
  FOR SELECT TO authenticated
  USING ((select auth.uid()) = user_id);
```

## Verificación

Después de aplicar, ejecutar advisor de Supabase y confirmar que no hay warnings de "auth function called per row".

