【问题标题】:Supabase / PostgREST: Deny select multipleSupabase / PostgREST:拒绝选择多个
【发布时间】:2021-07-26 17:43:30
【问题描述】:

我正在构建一个 supabase 应用程序。每个用户都获得一个 uuid(或多个,如果他愿意),而不是登录。每个知道 uuid 的人都可以完全访问此 uuid 背后的数据。

所以基本上数据库对任何人都是开放的,只要你使用任何有效的 uuid 来写/读你的东西。

现在的问题是:我不希望用户能够选择表中的所有条目。我想强制每个查询都有一个条件where id = xxx。当然我可以在我的应用程序中执行此操作,但这还不够,因为我们永远不应该信任客户端...我需要在后端(即在 postgrest/supabase 中)强制执行此操作。

在 Firestore 中,读取权限在 getlist 中分解,所以我可以只允许 get 并禁止 list,我很高兴。 postgrest/supbase 中有类似的东西吗?

【问题讨论】:

    标签: postgresql postgrest supabase


    【解决方案1】:

    我想强制每个查询都有一个条件,其中 id = xxx。

    这正是 PostgreSQL RLS policy 会做的事情。

    你有一些关于 supabase 文档的例子:

    https://supabase.io/docs/guides/auth#policy-examples

    【讨论】:

    • thx @steve-chavez,我已经检查了这些,但我不知道如何解决我的 RLS 问题。我的尝试:create policy "can select only 1 result at a time" on board for select using (id LIKE '_%')。所以我希望用户 必须 将 id 传递给查询。但这不起作用,不能在 uuid 上使用 LIKE 运算符...(id 是 uuid)
    • 您可以将 uuid 转换为文本,例如:using (id::text LIKE '_%')
    • ok thx,使用强制转换策略是有效的,但是它不能满足我的要求……我希望用户必须为所有查询传递一个 ID!他不应该只是select * from xxx!仅当传递了 id 时,查询才应该起作用,例如select * from xxx where id='123'... 我该怎么做?
    • 嗯,我明白你的意思了。也许这不是 RLS 的任务。我们在 PostgREST 中有一个即将推出的功能,我认为可以解决这个问题,请参阅提案 here。正如您所提到的,它将强制存在一个条件以使查询成功。
    • @Tagas 现在实现这一目标的方法是创建强制存在条件的 SQL 函数。并且只授予客户对这些功能的访问权限 - 不授予客户对表的访问权限。通过rpc 调用函数使它们非常灵活,它们支持与表相同的过滤器。让我知道这是否对您有用,我将通过示例发布另一个答案。
    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 2021-08-05
    • 2022-09-28
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多