提问人:Nathan Tew 提问时间:10/12/2023 更新时间:10/12/2023 访问量:56
如何将 supabase RLS 与“in”和“select”一起使用,而不必提供对联接表的不受限制的 RLS 访问
how to use supabase RLS with "in" and "select" without having to provide unrestricted RLS access to the joined tables
问:
我正在尝试在我的 supabase 表上设置简单的 RLS。我在所有表上启用了 RLS,然后将此策略添加到我想要从中进行选择的表中:
(project_id IN ( SELECT projects.id FROM projects))
但是,它总是失败,因为表项目也启用了 RLS。
实际上,这些策略会更加复杂,并且涉及多个表。
如何使用 RLS,而不必公开制定 RLS 策略所需的所有表?
答:
0赞
Nathan Tew
10/12/2023
#1
好的,弄清楚了,事实证明这相对简单,但我会在没有指导的情况下为遇到相同问题的人发布一个答案。
解决方案是使用可以查询受 RLS 保护的表而不会受到 RLS 惩罚的表:security definer functions
https://supabase.com/docs/guides/database/postgres/row-level-security#use-security-definer-functions
https://supabase.com/docs/guides/auth/row-level-security#using-security-definer-functions
您可以创建新的架构,并使用 SQL 编辑器或 GUI 添加所需的函数。该函数可以接受参数,如 postgres 文档中所示,该文档还解释了其他一些选项:private
https://www.postgresql.org/docs/current/sql-createfunction.html
评论