infinite recursion detected in policy for relation (supabase rls 정책 설정 시 에러)

Jiumn·2024년 12월 9일
"message": "infinite recursion detected in policy for relation \"product\""

custom function 설정해서 rls 정책에 연결
boolean 값을 return 하게 해서 true 일 때 정책이 실행되도록 함

처음에 설정했던 값은 다음과 같았다.

SELECT 1
    FROM product p
    JOIN fridge_member f ON p.fridge_id = f.fridge_id
    WHERE f.user_id = auth.uid() AND f.fridge_id = p.fridge_id

무한 재귀 호출이 일어나는 이유는 product 테이블에 대해서 참조를 하기 때문이다.

CREATE FUNCTION check_user_in_fridge() RETURNS BOOLEAN AS $$
SELECT EXISTS (
    SELECT 1
    FROM product p
    JOIN fridge_member f ON p.fridge_id = f.fridge_id
    WHERE f.user_id = auth.uid() AND f.fridge_id = p.fridge_id
  );
$$ LANGUAGE sql SECURITY DEFINER;

-- DROP FUNCTION IF EXISTS check_user_in_fridge();

처음에 $$ LANGUAGE sql SECURITY DEFINER; 이 부분을 다르게 설정했을 때는 실행이 안 됐으나 SECTURITY DEFINER 로 설정한 후에 실행이 됐다.

https://github.com/orgs/supabase/discussions/3328

참고

profile
Back-End Wep Developer. 꾸준함이 능력이다. Node.js, React.js를 주로 다룹니다.

0개의 댓글