【问题标题】:Firebase Firestore prevent client side creation of fields in a documentFirebase Firestore 阻止客户端在文档中创建字段
【发布时间】:2018-08-26 09:22:10
【问题描述】:

我正在努力寻找一种解决方案,以防止客户端仅在他们在 Firestore 中具有写入权限的文档中创建具有值的随机字段。由于您不能像使用实时数据库那样限制对 Firestore 中单个字段的访问,因此这似乎很难实现。

一个解决方案可能是不允许创建字段而只让客户端更新字段,但这意味着您必须为文档预先创建字段,这在我看来并不是一个很好的解决方案,特别是如果您有文档每个用户,它们是动态创建的,并且必须使用云功能在文档中预先创建字段似乎是不合理的。

谁有更好的解决方案?

【问题讨论】:

    标签: android firebase google-cloud-firestore firebase-security


    【解决方案1】:

    如 Firebase Firestore 文档中所述,您实际上可以在某些字段中阻止或允许写入或读取。这可以通过添加类似这样的规则来实现:

    match /collection/{doc} {
      allow update: if request.resource.data.field == resource.data.field;
    }
    

    这基本上会检查该特定字段在更新后是否具有完全相同的值。您还可以添加规则来检查请求的值是否在范围之间或等于(您的预定义值)。

    allow update: if request.resource.data.field > 0 && request.resource.data.field > 100;
    

    【讨论】:

    • 为什么要删除所有内容?答案和评论都没有帮助吗?
    • 抱歉,我删除了所有内容,因为我的第一个解决方案没有像我希望的那样奏效,但现在我想我找到了我正在寻找的解决方案:allow write: if request.auth.uid == user && ((request.writeFields.size() == 1) && ('chat-token' in request.writeFields || 'description' in request.writeFields));
    【解决方案2】:

    您可以检查request.resource 的键,并且只有在它不包含您希望保持只读的字段时才通过它(这意味着请求不会尝试更新该字段)。例如:

    allow update: if !request.resource.data.keys().hasAny(['my_field'])
    

    (感谢James Quallsinspiration!)

    【讨论】:

      猜你喜欢
      • 2019-04-17
      • 2015-09-10
      • 2011-10-17
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 2019-11-25
      • 2021-04-02
      相关资源
      最近更新 更多