【问题标题】:Firestore Rules - Validate if data exists in other collectionFirestore 规则 - 验证数据是否存在于其他集合中
【发布时间】:2019-02-07 09:31:07
【问题描述】:

我目前正在制定我的 Firestore 规则,我需要验证传入的数据。除了我已经拥有的,我还需要验证传入的来源和标签字段是否存在于集合来源和标签中。在使用引用时我已经找到了如何做到这一点,但我使用的是嵌入式数据,所以我不确定如何准确地做到这一点。

function incomingData() {
  return request.resource.data
}
function validTicket() {
    return incomingData().email is string &&
    incomingData().description is string &&
    incomingData().address is string &&
    incomingData().location is string &&
    incomingData().postCode.matches('^[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]') &&
    incomingData().size() == 5 &&
    incomingData().hasAll(['email','description', 'address', 'location', 'postCode']) &&
    isSecretary()
}

在标签集合中,每个文档都有一个带有标签名称的值。这同样适用于起源。

【问题讨论】:

  • 您可以发布来自集合来源和标签的文档样本吗?发布函数incomingData 也会有帮助
  • @RicardoSmania 完成!

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


【解决方案1】:

很抱歉,我的回答是片面的,我需要您发布您当前的 Firestore 规则,以及票证集合的名称...

无论如何,对于标签,您将无法搜索它们的值,也无法在规则内搜索,因此您应该将它们保存为键。也就是说,sports文件的key应该是sports,而不是8VCCvq7qnvjyT98r95pu。

接下来,您将不得不使用函数exists,方法如下:

function isTagExists(tag) {
    return exists(/databases/$(database)/documents/tags/$(tag));
}

如果您更新了问题或者您需要更多关于我的解决方案的帮助,请告诉我。

您还可以在以下位置阅读更多信息: https://firebase.google.com/docs/firestore/security/rules-conditions

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2021-11-14
    • 2017-09-24
    • 2015-04-30
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多