\pset footer off \echo '--- 1. visiteur anonyme (clé anon, aucun compte) : profils lisibles ?' set role anon; select email, phone from public.profiles; \echo '--- 2. anonyme : réservations lisibles ?' select user_id, status from public.bookings; reset role; \echo '--- 3. Camille connectée : passe son propre rôle à admin ?' set role authenticated; set request.jwt.claim.sub='11111111-1111-1111-1111-111111111111'; update public.profiles set role='admin' where id='11111111-1111-1111-1111-111111111111' returning email, role; \echo '--- 4. Camille annule la réservation d Idris ?' update public.bookings set status='cancelled' where user_id='22222222-2222-2222-2222-222222222222' returning user_id, status; \echo '--- 5. Camille enregistre elle-même un paiement réussi, sans Stripe ?' insert into public.payments(user_id,amount_cents,status,stripe_session_id) values ('11111111-1111-1111-1111-111111111111',1800,'succeeded','n_importe_quoi') returning status, stripe_session_id; \echo '--- 6. créneau de capacité 1 déjà plein : la base accepte une 2e réservation, puis un doublon ?' insert into public.bookings(user_id,slot_id,status) values ('11111111-1111-1111-1111-111111111111','33333333-3333-3333-3333-333333333333','confirmed'),('11111111-1111-1111-1111-111111111111','33333333-3333-3333-3333-333333333333','confirmed') returning user_id; reset role; select capacity, (select count(*) from public.bookings b where b.slot_id=s.id and status<>'cancelled') as reservations from public.slots s; \echo '--- 7. politiques vivantes' select tablename, policyname, cmd, roles from pg_policies where schemaname='public' order by 1,2;