v0.1 — Admin RLS Policies
Branch: develop (commit diretto)
Data: 24/03/2026
Tipo: fix (sicurezza, RLS, admin panel)
Contesto
Le pagine admin /admin/users e /admin/events non mostravano dati perché le RLS policy esistenti sulla tabella profiles ed events restringevano la visibilità alla sola riga dell’utente corrente (auth.uid() = id). Un admin loggato vedeva solo se stesso.
Problema tecnico
Il frontend usa il browser client Supabase (chiave anon + JWT dell’utente). Per le query admin, il token JWT contiene il user_id ma Supabase RLS non ha una funzione built-in auth.role() che legge dalla tabella profiles — occorre una subquery esplicita.
Le policy aggiunte sono PERMISSIVE e vengono sommate con OR alle policy esistenti:
- Utenti normali: la policy preesistente
auth.uid() = idli limita alla propria riga ✓ - Admin: la nuova policy consente SELECT su tutto ✓
Migration 20260324000004_admin_rls_policies.sql
Tabella profiles
-- Lettura: admin vede tutti i profili
CREATE POLICY "admin_read_all_profiles"
ON public.profiles FOR SELECT
USING (
EXISTS (
SELECT 1 FROM public.profiles p
WHERE p.id = auth.uid()
AND p.role IN ('admin', 'super_admin')
)
);
-- Scrittura: admin può aggiornare qualsiasi profilo (ruolo/stato)
CREATE POLICY "admin_update_any_profile"
ON public.profiles FOR UPDATE
USING (
EXISTS (
SELECT 1 FROM public.profiles p
WHERE p.id = auth.uid()
AND p.role IN ('admin', 'super_admin')
)
)
WITH CHECK (true);Tabella events
-- Lettura: admin vede tutti gli eventi
CREATE POLICY "admin_read_all_events"
ON public.events FOR SELECT
USING ( ... role IN ('admin', 'super_admin') ... );
-- Modifica: admin può pubblicare/cancellare/bozza qualsiasi evento
CREATE POLICY "admin_update_any_event"
ON public.events FOR UPDATE ...;
-- Cancellazione: admin può eliminare qualsiasi evento
CREATE POLICY "admin_delete_any_event"
ON public.events FOR DELETE ...;Sidebar: Post rimosso
La voce Post è stata rimossa da AdminSidebar.tsx in quanto la feature non è ancora implementata. Verrà reintrodotta in una release futura.
File modificati / creati
supabase/migrations/20260324000004_admin_rls_policies.sql(nuovo)components/dashboard/AdminSidebar.tsx