CREATE OR REPLACE FUNCTION public.is_arc_committee_member_of_association(_user_id uuid, _association_id uuid) RETURNS boolean LANGUAGE sql STABLE SECURITY DEFINER SET search_path TO 'public' AS $$ SELECT EXISTS ( SELECT 1 FROM public.arc_committee_members acm JOIN auth.users u ON lower(u.email) = lower(acm.email) WHERE u.id = _user_id AND acm.association_id = _association_id AND acm.is_active = true AND acm.email IS NOT NULL ); $$; DROP POLICY IF EXISTS "ARC committee members can view association ARC applications" ON public.arc_applications; CREATE POLICY "ARC committee members can view association ARC applications" ON public.arc_applications FOR SELECT TO authenticated USING ( public.has_role(auth.uid(), 'arc_member'::public.app_role) AND public.is_arc_committee_member_of_association(auth.uid(), association_id) );