Fix: self-heal del profile en middleware + backfill de users existentes

El trigger prestamos_on_auth_user_created coexiste con otro trigger del
proyecto vecino en auth.users y no siempre dispara. Consecuencia:
usuarios que hacían login vía OAuth entraban con user pero sin profile,
y la app los trataba como "no logueado".

- Middleware: si hay user y no hay profile (email @uabc.edu.mx), upsert
  del profile con datos del OAuth (nombre desde user_metadata.full_name).
- Migración 0005: policy RLS profiles_insert_self con check
  (id=auth.uid() and rol='alumno') — impide escalación a admin desde el
  self-heal.
- Backfill manual ejecutado en prod para los 8 users @uabc.edu.mx que
  ya existían en auth.users pero no tenían profile.
This commit is contained in:
2026-08-24 09:36:16 -07:00
parent d0f01ea18c
commit bcecdbb184
2 changed files with 38 additions and 2 deletions
@@ -0,0 +1,18 @@
-- 0005_profiles_insert_self.sql
-- Permite al usuario autenticado insertar su propio profile.
-- Necesario para el self-heal del middleware cuando el trigger
-- prestamos_on_auth_user_created no dispara (coexiste con otro trigger
-- del proyecto vecino en auth.users que a veces impide la ejecucion).
-- rol='alumno' obligatorio en el CHECK -> el user no puede promoverse
-- a admin insertando; solo el admin puede modificar rol via
-- profiles_admin_all (definida en 0001).
begin;
drop policy if exists profiles_insert_self on prestamos.profiles;
create policy profiles_insert_self on prestamos.profiles
for insert to authenticated
with check (id = auth.uid() and rol = 'alumno');
commit;