feat(admin): onboarding por invitación — /admin/usuarios + /auth/confirm

Platform admin invita usuarios de empresa desde /admin/usuarios.
inviteUserByEmail + insert inmediato en user_roles (org_admin).
Rollback explícito si falla el insert. /auth/confirm maneja el link
de invitación con PASSWORD_RECOVERY event. Middleware no requirió
cambios — /auth/confirm ya queda fuera del matcher de rutas protegidas.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
markosbenitez
2026-06-29 14:54:30 -03:00
parent d211382e4d
commit 4611fb2363
6 changed files with 540 additions and 0 deletions

View File

@@ -11,3 +11,14 @@ export function createClient() {
return createSupabaseClient(url, anonKey)
}
// service_role — bypasa RLS por completo (regla 9 CLAUDE.md). Solo se importa
// desde Server Components / Server Actions ('use server'), nunca desde código
// que se bundlea al cliente. No exportar este cliente ni su resultado hacia props
// de un Client Component.
export function getSupabaseAdmin() {
const url = process.env.NEXT_PUBLIC_SUPABASE_URL ?? 'https://placeholder.supabase.co'
const serviceKey = process.env.SUPABASE_SERVICE_ROLE_KEY ?? 'placeholder'
return createSupabaseClient(url, serviceKey)
}