Files

156 lines
6.5 KiB
SQL
Raw Permalink Normal View History

-- M11 — Le scritture seguono i permessi dell'interfaccia (DD-023).
--
-- Le tabelle della v1.0 avevano policy `USING (true)` per anon e authenticated. M4 ha
-- tolto il GRANT ad anon, ma per gli autenticati non era rimasto nessun limite: un
-- giocatore qualsiasi poteva cancellare tutti gli eventi o riscrivere il voto di un altro
-- parlando direttamente con PostgREST, senza passare dall'interfaccia che quei pulsanti
-- glieli nasconde.
--
-- Da qui in poi le policy dicono quello che i componenti già fanno:
-- eventi_app -> solo admin (la rotta /eventi è loro)
-- risposte_presenze, cacche_partita -> la propria riga (giocatore_id)
-- pagelle_voti, mvp_voti, badge_social_voti -> il proprio voto (votante_id)
-- turni_palloni, scout_* -> invariate: nell'app non hanno gate
--
-- La lettura non cambia: resta aperta a tutti gli autenticati.
--
-- L'identità è lo slot di `giocatori_squadra` collegato all'account, con lo stesso
-- EXISTS usato dalle policy dei profili (migration di correzione, DD-017): la funzione
-- `mio_giocatore_id()` di M2 lì è stata rimossa e non va reintrodotta. Regge perché dopo
-- DD-018 il giocatore selezionato sul dispositivo è sempre lo slot dell'account.
-- --- eventi: li gestisce chi ha /eventi, cioè un amministratore ---------------------
DROP POLICY "Chiunque puo creare eventi" ON public.eventi_app;
DROP POLICY "Chiunque puo modificare eventi" ON public.eventi_app;
DROP POLICY "Chiunque puo eliminare eventi" ON public.eventi_app;
CREATE POLICY "Gli admin gestiscono gli eventi" ON public.eventi_app
FOR ALL TO authenticated
USING (public.has_role(auth.uid(), 'admin'::public.app_role))
WITH CHECK (public.has_role(auth.uid(), 'admin'::public.app_role));
-- --- presenze: ognuno risponde per sé ----------------------------------------------
DROP POLICY "Chiunque puo salvare la propria presenza" ON public.risposte_presenze;
DROP POLICY "Chiunque puo aggiornare la propria presenza" ON public.risposte_presenze;
DROP POLICY "Chiunque puo togliere la propria presenza" ON public.risposte_presenze;
CREATE POLICY "Ognuno gestisce la propria presenza" ON public.risposte_presenze
FOR ALL TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = giocatore_id AND g.auth_user_id = auth.uid()
)
)
WITH CHECK (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = giocatore_id AND g.auth_user_id = auth.uid()
)
);
CREATE POLICY "Gli admin gestiscono tutte le presenze" ON public.risposte_presenze
FOR ALL TO authenticated
USING (public.has_role(auth.uid(), 'admin'::public.app_role))
WITH CHECK (public.has_role(auth.uid(), 'admin'::public.app_role));
-- --- cacche: ognuno dichiara le proprie --------------------------------------------
DROP POLICY "Chiunque puo dichiarare le cacche" ON public.cacche_partita;
DROP POLICY "Chiunque puo aggiornare le cacche" ON public.cacche_partita;
DROP POLICY "Chiunque puo cancellare le cacche" ON public.cacche_partita;
CREATE POLICY "Ognuno dichiara le proprie cacche" ON public.cacche_partita
FOR ALL TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = giocatore_id AND g.auth_user_id = auth.uid()
)
)
WITH CHECK (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = giocatore_id AND g.auth_user_id = auth.uid()
)
);
CREATE POLICY "Gli admin gestiscono tutte le cacche" ON public.cacche_partita
FOR ALL TO authenticated
USING (public.has_role(auth.uid(), 'admin'::public.app_role))
WITH CHECK (public.has_role(auth.uid(), 'admin'::public.app_role));
-- --- pagelle: ognuno firma i propri voti -------------------------------------------
DROP POLICY "Chiunque puo votare le pagelle" ON public.pagelle_voti;
DROP POLICY "Chiunque puo cambiare il proprio voto pagella" ON public.pagelle_voti;
DROP POLICY "Chiunque puo togliere il proprio voto pagella" ON public.pagelle_voti;
CREATE POLICY "Ognuno gestisce i propri voti pagella" ON public.pagelle_voti
FOR ALL TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = votante_id AND g.auth_user_id = auth.uid()
)
)
WITH CHECK (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = votante_id AND g.auth_user_id = auth.uid()
)
);
CREATE POLICY "Gli admin gestiscono tutte le pagelle" ON public.pagelle_voti
FOR ALL TO authenticated
USING (public.has_role(auth.uid(), 'admin'::public.app_role))
WITH CHECK (public.has_role(auth.uid(), 'admin'::public.app_role));
-- --- MVP ----------------------------------------------------------------------------
DROP POLICY "Chiunque puo votare l MVP" ON public.mvp_voti;
DROP POLICY "Chiunque puo cambiare il proprio voto" ON public.mvp_voti;
DROP POLICY "Chiunque puo togliere il proprio voto" ON public.mvp_voti;
CREATE POLICY "Ognuno gestisce il proprio voto MVP" ON public.mvp_voti
FOR ALL TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = votante_id AND g.auth_user_id = auth.uid()
)
)
WITH CHECK (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = votante_id AND g.auth_user_id = auth.uid()
)
);
CREATE POLICY "Gli admin gestiscono tutti i voti MVP" ON public.mvp_voti
FOR ALL TO authenticated
USING (public.has_role(auth.uid(), 'admin'::public.app_role))
WITH CHECK (public.has_role(auth.uid(), 'admin'::public.app_role));
-- --- badge social -------------------------------------------------------------------
DROP POLICY "Chiunque puo votare i badge social" ON public.badge_social_voti;
DROP POLICY "Chiunque puo cambiare il proprio voto social" ON public.badge_social_voti;
DROP POLICY "Chiunque puo togliere il proprio voto social" ON public.badge_social_voti;
CREATE POLICY "Ognuno gestisce i propri voti social" ON public.badge_social_voti
FOR ALL TO authenticated
USING (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = votante_id AND g.auth_user_id = auth.uid()
)
)
WITH CHECK (
EXISTS (
SELECT 1 FROM public.giocatori_squadra g
WHERE g.id = votante_id AND g.auth_user_id = auth.uid()
)
);
CREATE POLICY "Gli admin gestiscono tutti i voti social" ON public.badge_social_voti
FOR ALL TO authenticated
USING (public.has_role(auth.uid(), 'admin'::public.app_role))
WITH CHECK (public.has_role(auth.uid(), 'admin'::public.app_role));