根据我所学到的,设置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_branch
中branch_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=*
1条答案
按热度按时间xmq68pz91#
好的。看起来我必须正确地为我引用的另一个表配置策略:
student_branch
和admin
。现在我对这两个表使用这个策略:
我担心这太开放了,我打算在另一个新问题中问。