【问题标题】:Firestore security rules based on individual documents?基于单个文档的 Firestore 安全规则?
【发布时间】:2019-04-20 05:20:23
【问题描述】:

在我的 Google Firestore 集合中,我有一系列文档。这些文档中的每一个都有自己的数据。每个文档中都包含一个名为 api_key 的字段;

如果使用 Javascript,我将如何使 set/update 命令仅在命令正确包含 api_key 中的值时才能被接受。使用api_key,该脚本应该能够set/update 该文档树中的任何内容......并且仅该文档树。

这样的事情可能吗?

【问题讨论】:

  • 我不确定您要在这里完成什么。也许您可以通过提供一些在各种情况下应该允许或拒绝的查询来扩展这一点,比较一些实际的文档内容。
  • 我希望人们能够通过 javascript 编辑他们的文档,但前提是他们包含与该文档中的字段匹配的 api_key。没有任何代码可以更好地解释它。
  • 好的,我不清楚您所说的“文档树”是什么意思。这不是 Firestore 使用的术语。

标签: google-cloud-firestore firebase-security


【解决方案1】:

我认为目前这是不可能的(不使用不推荐使用的表达式,强烈建议不要这样做),因为安全规则不允许您区分为文档更新中的字段提供的值和值具有相同名称的现有字段。尝试将提供的值与现有值进行比较是很诱人的:

allow update: if "apiKey" in request.resource.data
    && request.resource.data.apiKey == resource.data.apiKey;

但是当您说request.resource.data.apiKey 时,它将评估为或者文档中的现有字段值,提供的值。因此,如果有人在更新中根本没有提供 apiKey,则安全规则将只提供现有的 apiKey 值,并且允许写入。此规则只会拒绝提供 apiKey 的写入与现有值不匹配。

【讨论】:

    猜你喜欢
    • 2019-07-23
    • 2020-06-19
    • 2019-06-15
    • 2020-07-04
    • 2019-03-03
    • 2020-05-23
    • 2018-03-22
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多