firebase - 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()
}
在标签集合中,每个文档都有一个带有标签名称的值。这同样适用于起源。
解决方案
很抱歉,我的回答将是片面的,我需要您发布您当前的 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
推荐阅读
- javascript - target.attr 不是函数,长度未定义 jquery onclick
- php - 用户登录时如何将主页重定向到另一个页面
- jetbrains-ide - 更改范围线颜色 IDEA
- forms - 将字段集中的一个元素分组是否是可访问性问题?
- cytoscape.js - 如何在 cytoscape.js 中获取折叠节点
- mqtt - mqtt js 在订阅时获取频道值
- c - 从类型'struct Node *'分配给类型'struct Node'时的C不兼容类型
- mysql - 我想显示姓名和地址栏,以及姓名为 Ahmad 且出生于 1995 年 1 月 5 日之前的人?
- typescript - 在 Vue.js 3 中设置自定义分隔符
- vue.js - Nuxt.js 上仅存储客户端代码