首页 > 解决方案 > Firestore 规则 - 验证数据是否存在于其他集合中

问题描述

我目前正在研究我的 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()
}

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

在此处输入图像描述

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


很抱歉,我的回答将是片面的,我需要您发布您当前的 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


推荐阅读