我有一张桌子,像:
table person_groups
person_id: uuid
group_id: uuid我希望那些uid() = person_id能够在他们的团队中得到所有其他person_ids的人。
我试着用
CREATE POLICY "select_comembers" ON "public"."person_groups"
AS PERMISSIVE FOR SELECT
TO public
USING (group_id in (select group_id from person_groups where person_id=uid()))但是,当RLS被强制执行时,这会触发无限递归错误(在编辑时,定义器不受RLS约束,因此在这种情况下,这显然是没有问题的)。
以这种方式,允许在表中找到与您正在筛选的列共享不同列的所有行的适当方法是什么?是否有适当的方法来使用JOIN来解决这个问题?
发布于 2022-05-25 05:56:09
听起来你应该重新设计你的数据模型。一个可能的解决方案是将子查询替换为调用SECURITY DEFINER函数,该函数属于表所有者或其他不受行级安全性限制的用户。
https://stackoverflow.com/questions/72369134
复制相似问题