postgresql 基于另一个表的表的RLS策略

f5emj3cl  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(189)

根据我所学到的,设置RLS应该很容易。但不知怎么的,我不能让它工作。请给我点光。谢谢
对于表student,我的策略如下:

CREATE POLICY "crud" ON "public"."student"
AS PERMISSIVE FOR ALL
TO public
USING ((id IN ( SELECT sb.student_id FROM student_branch sb WHERE (sb.branch_id = ( SELECT a.branch_id FROM admin a WHERE (a.id = '62bfcd1c-016c-416a-a155-388e766b411f'::uuid))))))
WITH CHECK ((id IN ( SELECT sb.student_id FROM student_branch sb WHERE (sb.branch_id = ( SELECT a.branch_id FROM admin a WHERE (a.id = '62bfcd1c-016c-416a-a155-388e766b411f'::uuid))))))

基本上是一个ID为62bfcd1c-016c-416a-a155-388e766b411f的管理员,假设branch_id = 1应该只看到表student_branchbranch_id = 1的学生,
但我得到的结果是空的。我试着运行下面的SQL语句,它工作正常,但策略没有得到强制执行。

select * from student where (id IN ( SELECT sb.student_id
       FROM student_branch sb
      WHERE (sb.branch_id = ( SELECT admin.branch_id
               FROM admin
              WHERE (admin.id = '62bfcd1c-016c-416a-a155-388e766b411f'::uuid)))))

学生数据

id, name
========
1, Student 1
2, Student 2

管理员数据

id, name, branch_id
============
62bfcd1c-016c-416a-a155-388e766b411f, Admin 1, 1

学生分支数据

id, student_id, branch_id
======================
1, 1, 1

使用Supabase API访问:

<url>/student?select=*
xmq68pz9

xmq68pz91#

好的。看起来我必须正确地为我引用的另一个表配置策略:student_branchadmin
现在我对这两个表使用这个策略:

CREATE POLICY "policy_name"
ON public.student_branch
FOR SELECT USING (
  true
);

我担心这太开放了,我打算在另一个新问题中问。

相关问题