javascript - 允许在 Firestore 中更新特定的嵌套值

标签 javascript google-cloud-firestore firebase-security

我需要让匿名用户能够更新嵌套架构中的特定值,而无需授予文档其余部分的权限。
events是顶级集合,我像这样更新我的文档

update(`events/${event.id}`, {
  [`boardgames.${boardgameId}.votes.${uid}`]: true,
})

我已经尝试过这个解决方案
allow update: if ((request.writeFields.size() == 1) && ('boardgames' in request.writeFields));

如前所述here但它失败了(两半也独立失败)。

我错过了什么? “进入”嵌套对象时,我不是只更新一个字段吗?

能够控制台记录 request 将非常有帮助和 request.writeFields .

请注意,理想情况下,我只想允许修改最深的属性,即当前用户的 uid。里面votes .

最佳答案

实际上,request.writeFields捕获修改字段的完整路径,因此在您的情况下,它将等于 boardgames.${boardgameId}.votes.${uid} .
您可以使用带有 String.matches 的正则表达式

allow update: if request.auth.uid != null
  && request.writeFields.size() == 1
  && request.writeFields[0].matches("boardgames\.[^.]{5,25}\.votes\." + request.auth.uid)
小心: request.writeFields 已被弃用,但不幸的是,您的问题没有很好的替代品

关于javascript - 允许在 Firestore 中更新特定的嵌套值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51137412/

相关文章:

javascript - 文档级事件监听器被复制

javascript - 是否可以使用 javascript :window. print() 返回值?

android - Firebase:登录前写入数据库

Firebase 存储 : How to overcome custom claims limits (1000 bytes)

javascript - FFT 与 offlineAudioContext

javascript - 自定义切换功能不适用于 Ionic 应用程序中的 ng-click

Android/FireStore 查询并返回自定义对象

firebase - 从 Firestore Listen 回调返回列表

node.js - Firebase 堆栈 "Error: too many index entries for entity"

javascript - firebase 多路径更新和每个路径的规则