Files
wamarket/supabase/sql/0003_security_fixes.sql
softgrey af81124d48 Initial commit: WaMarket MVP
Marketplace inversée (Next.js 16 App Router + Supabase Cloud) : auth,
schéma + RLS, publication de besoins avec upload d'images, feed avec
filtres, offres, acceptation via RPC, messagerie temps réel,
dashboards, et Dockerfile pour déploiement Coolify.
2026-07-30 14:33:17 +00:00

34 lines
1.4 KiB
SQL

-- Corrections suite au linter de sécurité Supabase (get_advisors) après 0002.
-- 1. Bucket public : pas besoin d'une policy SELECT (elle permet le listing
-- complet du bucket, superflu — l'URL publique fonctionne sans RLS).
drop policy if exists "need_images_bucket_read" on storage.objects;
-- 2. handle_new_user() ne doit être invocable que par le trigger, pas en RPC public.
revoke execute on function public.handle_new_user() from public, anon, authenticated;
-- 3. accept_offer() : anon n'a aucune raison de l'appeler (auth.uid() sera
-- toujours null pour lui, mais autant réduire la surface d'API exposée).
revoke execute on function public.accept_offer(uuid) from anon;
-- 4. offer-images : resserrer la lecture aux seuls participants (marchand
-- auteur de l'offre, ou auteur du besoin concerné) au lieu de "tout
-- utilisateur connecté".
drop policy if exists "offer_images_bucket_read" on storage.objects;
create policy "offer_images_bucket_read"
on storage.objects for select
to authenticated
using (
bucket_id = 'offer-images'
and exists (
select 1
from public.offer_images oi
join public.offers o on o.id = oi.offer_id
where oi.storage_path = storage.objects.name
and (
o.merchant_id = auth.uid()
or exists (select 1 from public.needs n where n.id = o.need_id and n.author_id = auth.uid())
)
)
);