Siste av de tre gjenstående OOM-punktene fra ADR-043 (lag-OOM ADR-074,
eclectic på tvers av turneringer ADR-075, offentlig visning her).
Migrasjon 076: SECURITY DEFINER-bro public_order_of_merit_by_id, samme
anti-enumerering som public_org_by_slug/public_tournament_by_code. Ny
/public/order-of-merits/{id}-endepunkt (gjenbruker den eksisterende
leaderboard-beregningen direkte). Ny uautentisert frontend-side
modellert på public-club.tsx, "Del offentlig lenke" i innstillinger.
83/83 backend-tester, 45/45 vitest, scratch-verifisert i egen inkognito-
nettleserkontekst (ingen session-cookie). Migrasjon vist og bekreftet
før kjøring mot ekte teecup_db. Rullet ut.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
30 lines
1.3 KiB
PL/PgSQL
30 lines
1.3 KiB
PL/PgSQL
-- =====================================================================
|
|
-- TeeCup — migrasjon 076
|
|
-- Offentlig/delt Order of Merit-visning (ADR-076, "Steg 3" av OOM sin
|
|
-- gjenstår-liste fra ADR-043/074/075)
|
|
-- =====================================================================
|
|
-- Kun én ny bro-funksjon -- order_of_merit.public_visible finnes
|
|
-- allerede fra migrasjon 055, aldri brukt til noe før nå.
|
|
-- =====================================================================
|
|
|
|
\set ON_ERROR_STOP on
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- public_order_of_merit_by_id() -- samme mønster som public_org_by_slug
|
|
-- (009)/public_tournament_by_code (011): SECURITY DEFINER-bro, eneste
|
|
-- måte et /public/...-endepunkt får vite riktig org-kontekst FØR RLS
|
|
-- kan håndheve noe. Returnerer NULL for BÅDE "finnes ikke" og "finnes,
|
|
-- men er ikke offentlig" -- samme anti-enumerering som resten.
|
|
-- ---------------------------------------------------------------------
|
|
|
|
CREATE FUNCTION public_order_of_merit_by_id(p_id uuid)
|
|
RETURNS uuid
|
|
LANGUAGE sql
|
|
SECURITY DEFINER
|
|
SET search_path = public
|
|
STABLE
|
|
AS $$
|
|
SELECT organization_id FROM order_of_merit WHERE id = p_id AND public_visible = true;
|
|
$$;
|
|
|
|
GRANT EXECUTE ON FUNCTION public_order_of_merit_by_id(uuid) TO teecup_app;
|