-- ============================================================================ -- RAPPORT — Personen-Load mit Sharing-Support -- ============================================================================ -- Direkter `select * from persons where studio_id = $X` sieht nur lokale -- Personen. Geteilte Personen haben studio_id = NULL und ihre Sichtbarkeit -- kommt aus `person_studio_links`. Diese Funktion vereint beide Quellen. -- -- Kein SECURITY DEFINER — RLS bleibt aktiv, der User sieht nur, was er sehen -- darf. Die Funktion ist ein bequemer Query-Wrapper, kein Privilege-Escalator. -- ============================================================================ create or replace function load_persons_for_studio(p_studio_id uuid) returns setof persons language sql stable as $$ select p.* from persons p where p.studio_id = p_studio_id or exists ( select 1 from person_studio_links psl where psl.person_id = p.id and psl.studio_id = p_studio_id ) order by p.name; $$; grant execute on function load_persons_for_studio(uuid) to authenticated;