【问题标题】:Firestore Database Rules for User用户的 Firestore 数据库规则
【发布时间】:2018-01-24 01:00:51
【问题描述】:

我正在关注有关 Firestore 的教程,但我不太了解 Firestore 规则。我试图让任何人都能够在标准中创建 用户/uid/ 路径,但仅在请求者尝试更新时才允许更新 用户/他们的用户 ID/ 我在文档中看到了这一点,但它似乎对我不起作用:

allow write: if request.auth.uid == resource.data.author_id;

谁能解释上述行的功能和/或就我如何实现这一点提供建议?

另外,有没有办法为文档中的特定数据指定规则?

【问题讨论】:

    标签: firebase-security google-cloud-firestore


    【解决方案1】:

    您的文档似乎不包含author_id 字段。

    Firebase 文档Writing Conditions for Security Rules 使用此示例:

    service cloud.firestore {
      match /databases/{database}/documents {
        // Make sure the uid of the requesting user matches the 'author_id' field
        // of the document
        match /users/{user} {
          allow read, write: if request.auth.uid == resource.data.author_id;
        }
      }
    }
    

    这意味着随机用户将能够在users 集合中使用readwrite只有如果他们的身份验证ID 等于特定文档的author_id 字段。

    资源变量引用请求的文档,resource.data 是存储在文档中的所有字段和值的映射。有关资源变量的详细信息,请参阅reference documentation

    对于您的第二个问题,我建议您查看有关 resource 变量的文档(上面引用中的链接)。这与您的author_id 问题的逻辑相同。

    【讨论】:

      【解决方案2】:

      对于特定情况,您可以将allow write 拆分为三个createupdatedelete

      你的情况

      allow create: if request.auth.uid != null;
      allow update: if request.auth.uid == resource.data.author_id;
      

      这表示任何经过身份验证的用户都可以创建并且只能更新他们的文档。并且创建的用户必须有一个字段author_id,这是他们的用户ID。

      【讨论】:

      • 这个:request.auth.uid == resource.data.author_id 不起作用。当我键入资源然后数据时,没有 author_id 选项。感谢您的帮助。
      • @RonTLV data 指的是您在 Firestore 中的当前数据节点。必须有一个字段author_id 来引用它。
      猜你喜欢
      • 2020-02-24
      • 1970-01-01
      • 2018-03-21
      • 2020-06-09
      • 2020-05-28
      • 2020-07-09
      • 2020-11-22
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多