我正在进入Suabase,为了练习,我正在制作一个简化的网站生成器
但是,我遇到了行级安全策略方面的问题。
我有三张表:
- 用户→与用户的信息,如名字,姓氏等
- 网站→所有网站
- user_website→包含哪个网站属于哪个人的信息(因为一个网站可以由多个用户拥有/编辑(
用户 |
---|
user_id |
您可以定义这样的策略:
CREATE POLICY may_edit ON website
FOR UPDATE TO PUBLIC
USING (EXISTS
(SELECT 1 FROM user_website
WHERE user_website.website_id = website.website_id
AND user_website.user_id = uid()
)
);
这里,uid()
是一个返回当前用户ID的函数。
此政策将允许每个人修改自己的网站。
我打电话给一个朋友寻求帮助,他指出了Supadase文档中关于"带有联接的策略"。。。但它仍然对我不起作用。
原因是表格网站上的RLS策略引用了表格用户网站,该网站还不允许用户访问任何内容。
解决方案
RLS政策,可在网站上选择:
auth.uid() in (
select user_id from user_website
where website_id = website.website_id
)
用户网站上选择的RLS策略:
auth.uid() = user_id