Firebase安全规则:如何访问由使用合并的集合操作创建的新映射字段项的密钥?
假设我在JavaScript中发出一个更新操作,向submap添加一个条目:Firebase安全规则:如何访问由使用合并的集合操作创建的新映射字段项的密钥?,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,假设我在JavaScript中发出一个更新操作,向submap添加一个条目: db.collection('companies').doc(companyId).set({ employees: { [employeeId]: { name: 'Mrs Firebase', id: employeeId } } }, { merge: true }) 在我的安全规则中,我想获取emplo
db.collection('companies').doc(companyId).set({
employees: {
[employeeId]: {
name: 'Mrs Firebase',
id: employeeId
}
}
}, { merge: true })
在我的安全规则中,我想获取employeeId,即添加条目的密钥。这可能吗
我可以访问包含密钥的集合,例如:
request.resource.data.employees.diff(resource.data.employees).addedKeys()
exists(/databases/$(database)/documents/employees/$(employeeId))
但我看不到访问这组元素的方法
我不确定是否有办法访问此集合的元素,例如,将集合转换为列表或以其他方式访问新密钥
我希望访问添加的密钥的一个原因是通过检查该密钥是否存在于数据库的其他位置来确保数据完整性,例如:
request.resource.data.employees.diff(resource.data.employees).addedKeys()
exists(/databases/$(database)/documents/employees/$(employeeId))
另一个原因可能是验证添加的employeeId的类型或值。这是不可能的,因为没有任何东西可以阻止客户端同时添加多个键,而且规则中也没有按顺序检查的迭代。最好将此数据存储在子集合中的文档中,其中的目的显然是将一名员工存储在由该员工ID标识的单个文档中。是的,这看起来是可能的。请编辑问题以解释您遇到的具体问题,以及无法按预期方式工作的代码。我们需要一份明确的任务声明,说明您正在努力完成的任务。谢谢。我已经尽力勾勒出目标。具体的代码是困难的,只是因为我看不到一种方法来做到这一点。在集合上使用diff似乎很直观,但在安全规则语言中无法访问集合的单个元素。因此,您是说更新中的employeeId不是用作映射键的文本字符串,而是实际的变量值?啊,是的,抱歉,我在对象中使用它的位置错过了employeeId周围的[],简化示例时的输入错误。很抱歉