【问题标题】:FIrebase Rule: How use $ to access an ancestor node's data?FIrebase 规则:如何使用 $ 访问祖先节点的数据?
【发布时间】:2020-04-20 05:00:51
【问题描述】:

目标:只有经过身份验证的“所有者”用户才能在“某些集合”中读取/写入他们的文档。

示例查询:/users/peter/some-collection/myDoc

用户节点有一个字符串 uid 字段,这在许多 Firebase 规则示例中很常见。

我已经阅读了所有文档,它说您可以在路径中放置一个 {variable} 并使用 $ 来引用它,但是我无法使用在线数据库规则编辑器来“编译”这个规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{user}/some-collection/{doc} {
        allow read, write: if request.auth.uid == $(user).data.uid;
    }
  }
}

我正在尝试通过在用户/帐户级别验证 uid 来允许访问用户的子集合。

它不喜欢美元符号:

保存规则时出错 - 第 26 行:意外的“$”。

【问题讨论】:

  • 我不清楚您要做什么。对于有关安全规则的问题,显示规则应允许的实际查询总是有帮助的,准确说明应匹配的文档以及它们包含的内容。

标签: google-cloud-firestore firebase-security


【解决方案1】:

从路径中的通配符获得的$(user) 是字符串值,而不是文档。

如果要访问/users/{user}文档中的数据,可以do a get() call for that data

allow read, write: 
      if request.auth.uid == get(/databases/$(database)/documents/users/$(user)).data.uid;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2017-12-29
    • 2013-12-08
    • 1970-01-01
    相关资源
    最近更新 更多