Ouvre Le Mur de la Honte aux Archontes, plafond quotidien relevé à 12
Build and deploy / deploy (push) Successful in 36s

post_wall_note() n'a plus de vérification de rôle : un Archonte peut désormais publier une note anonyme comme n'importe quel Citoyen. La policy Storage d'upload sur wall-images perd aussi son filtre par rôle (sinon possible de poster une note mais pas d'y joindre une image). Limite quotidienne relevée de 10 à 12 notes pour couvrir tout le groupe plutôt que les seuls Citoyens.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Valentin ROBIN
2026-08-25 17:30:46 +02:00
parent 40a10170bb
commit 5e75939b94
4 changed files with 113 additions and 107 deletions
+19 -16
View File
@@ -1392,10 +1392,13 @@ grant execute on function public.wall_notes_today() to authenticated;
-- (contrairement au Char) : contrairement à la soirée de clôture, c'est une
-- mécanique de toute la semaine. Petite fenêtre de course possible si deux
-- personnes postent la même seconde alors qu'il reste 1 place (double
-- insertion à 11) — acceptée sciemment, comme d'autres arbitrages similaires
-- déjà faits dans le projet pour un groupe de ~12 amis. La signature change
-- (ajout de p_image_url) : l'ancienne (text) est explicitement supprimée,
-- sinon create or replace créerait une 2e surcharge au lieu de remplacer.
-- insertion à 13) — acceptée sciemment, comme d'autres arbitrages similaires
-- déjà faits dans le projet pour un groupe de ~12 amis. Ouvert aux Archontes
-- en plus des Citoyens (plus de vérification de rôle) : plafond relevé à 12
-- (au lieu de 10) pour couvrir tout le groupe, pas seulement les Citoyens.
-- La signature change (ajout de p_image_url) : l'ancienne (text) est
-- explicitement supprimée, sinon create or replace créerait une 2e
-- surcharge au lieu de remplacer.
drop function if exists public.post_wall_note(text);
create or replace function public.post_wall_note(p_text text, p_image_url text default null)
@@ -1405,7 +1408,6 @@ security definer
set search_path = public
as $$
declare
v_caller_role text;
v_today date := (now() at time zone 'Europe/Paris')::date;
v_already_posted boolean;
v_count_today int;
@@ -1416,11 +1418,10 @@ begin
raise exception 'authentication required';
end if;
select role into v_caller_role from public.profiles where id = auth.uid();
if v_caller_role = 'judge' then
raise exception 'only citizens can post on the wall';
end if;
-- Les Archontes peuvent désormais publier eux aussi (plus réservé aux
-- Citoyens) : plus de vérification de rôle ici, tout authentifié peut
-- poster une note anonyme — la limite de 12 (au lieu de 10) plus bas
-- suit ce changement pour couvrir tout le groupe.
if p_text is null or length(trim(p_text)) = 0 then
raise exception 'note vide';
end if;
@@ -1447,7 +1448,7 @@ begin
select count(*) into v_count_today
from public.wall_notes
where (created_at at time zone 'Europe/Paris')::date = v_today;
if v_count_today >= 10 then
if v_count_today >= 12 then
raise exception 'wall full today';
end if;
@@ -1481,14 +1482,16 @@ create policy "Wall images are publicly viewable"
on storage.objects for select
using (bucket_id = 'wall-images');
-- Les Archontes peuvent désormais publier sur le Mur eux aussi (voir
-- post_wall_note plus haut, qui n'a plus de restriction de rôle) : plus de
-- filtre par rôle ici non plus, sinon un Archonte pourrait poster une note
-- mais pas y joindre d'image.
drop policy if exists "Citizens can upload wall images" on storage.objects;
create policy "Citizens can upload wall images"
drop policy if exists "Members can upload wall images" on storage.objects;
create policy "Members can upload wall images"
on storage.objects for insert
to authenticated
with check (
bucket_id = 'wall-images'
and exists (select 1 from public.profiles p where p.id = auth.uid() and p.role <> 'judge')
);
with check (bucket_id = 'wall-images');
-- Réactions sur les notes -------------------------------------------------
-- Même principe d'anonymat que les notes elles-mêmes : chacun ne voit que