我正在尝试在我的供应表上设置简单的RLS。我在 all 表上启用了RLS,然后将此策略添加到我想要从中选择的表中:
(project_id IN ( SELECT projects.id FROM projects))
但是,它总是失败,因为表项目也打开了RLS。
实际上,策略将更加复杂,并涉及多个表。
如何使用RLS而不必公开制定RLS策略所需的所有表?
我正在尝试在我的供应表上设置简单的RLS。我在 all 表上启用了RLS,然后将此策略添加到我想要从中选择的表中:
(project_id IN ( SELECT projects.id FROM projects))
但是,它总是失败,因为表项目也打开了RLS。
实际上,策略将更加复杂,并涉及多个表。
如何使用RLS而不必公开制定RLS策略所需的所有表?
1条答案
按热度按时间qlckcl4x1#
好吧,算出来了,事实证明这是相对简单的,但我会张贴一个答案,为人们遇到同样的问题,没有指导。
解决方案是使用
security definer functions
,它可以查询受RLS保护的表,而不会产生RLS惩罚: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
您可以创建一个新的模式
private
,并使用SQL编辑器或GUI添加所需的函数。该函数可以接受参数,如postgres文档所示,该文档还解释了一些其他选项:https://www.postgresql.org/docs/current/sql-createfunction.html