使用“in”的 supabase RLS 策略总是失败

supabase RLS policy using "in" always fails

提问人:Nathan Tew 提问时间:10/12/2023 更新时间:10/31/2023 访问量:35

问:

我正在为 supabase 中的表设置 RLS,并从我的 React 应用程序中查询它。

使用此策略适用于:

(project_id = 8)

但是,这总是失败的:

(project_id IN ( SELECT projects.id FROM projects))

即使我已经确认项目表有一条 id 为 8 的记录:

select id from projects where id = 8
| id |
| -- |
| 8  |

因为第一个有效,所以我非常有信心它与我如何设置 RLS、如何连接到数据库、任何 jwt 问题或我如何查询数据无关。还有什么问题?难道是不允许请求的制作者查询项目表,因此策略总是失败吗?如果是这样,我该如何解决这个问题?仅仅因为我需要 RLS 来访问其他表,似乎没有意义。

PostgreSQL supabase 行级安全性 supabase-database

评论

0赞 Laurenz Albe 10/12/2023
是的,这应该可以正常工作。很难说你哪里出了问题,因为你给我们的信息很少。
0赞 Nathan Tew 10/12/2023
看来我必须使用安全定义器函数......如果我想通了,会更新

答:

0赞 Nathan Tew 10/31/2023 #1

此策略始终返回 false,因为表上的 RLS 会阻止此表查询它(此 RLS 策略适用于另一个表,而不是 ),因此始终导致不返回任何记录。projectsprojectsSELECT projects.id FROM projects

我不得不改用安全定义器函数,它可以绕过其他表上的 RLS:

如何将 supabase RLS 与“in”和“select”一起使用,而不必提供对联接表的不受限制的 RLS 访问