Design responsive, logo, et correctif RLS upload photo
Design & UX : - Renomme "Administration" en "Admin" (nav, page, docs). - Logo original (marteau de juge stylisé navy/or) en favicon (src/app/icon.svg, remplace le favicon.ico par défaut de create-next-app) et dans la navbar (components/logo.tsx). - Navbar : menu hamburger sur mobile (les liens débordaient à partir de ~4 entrées sur petit écran). - Leaderboard : lignes en deux niveaux sur mobile (infos membre / contrôles juges) au lieu d'un seul flex-wrap qui devenait illisible. - Contrôles de points juges (JudgePointControls) : boutons et champ montant réduits en mode compact pour tenir dans les colonnes du podium sur petit écran. - Podium : scroll horizontal de secours (overflow-x-auto) si le contenu dépasse malgré tout sur très petits écrans. - Table admin : pseudo/avatar sur une ligne, rôle/statut/actions sur une autre en mobile (le flex-1 sur l'input pseudo n'avait aucun effet en layout colonne). Correctif sécurité/fonctionnel : - storage.objects n'avait que des policies INSERT et UPDATE pour le bucket avatars, pas de policy SELECT. Postgres a besoin de lire la ligne existante pour évaluer la clause USING d'un UPDATE : sans SELECT, tout remplacement de photo (upsert) échouait avec "new row violates row-level security policy", même si les policies INSERT/UPDATE étaient correctes. Ajout d'une policy SELECT publique sur le bucket avatars (cohérent avec le fait que le bucket est déjà public en lecture). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+10
-1
@@ -198,7 +198,16 @@ insert into storage.buckets (id, name, public)
|
||||
values ('avatars', 'avatars', true)
|
||||
on conflict (id) do nothing;
|
||||
|
||||
-- Bucket public => la lecture se fait via l'URL publique, pas besoin de policy SELECT.
|
||||
-- Le bucket public sert la lecture via l'URL publique (hors RLS), mais une
|
||||
-- policy SELECT reste nécessaire : pour un upload en upsert (remplacement
|
||||
-- d'une photo existante), Postgres doit pouvoir lire la ligne existante en
|
||||
-- interne pour évaluer la clause USING de l'UPDATE — sans SELECT, l'upsert
|
||||
-- échoue avec "new row violates row-level security policy" même si les
|
||||
-- policies INSERT/UPDATE sont correctes.
|
||||
drop policy if exists "Avatars are publicly viewable" on storage.objects;
|
||||
create policy "Avatars are publicly viewable"
|
||||
on storage.objects for select
|
||||
using (bucket_id = 'avatars');
|
||||
|
||||
drop policy if exists "Users can upload their own avatar" on storage.objects;
|
||||
create policy "Users can upload their own avatar"
|
||||
|
||||
Reference in New Issue
Block a user