我需要让匿名用户能够更新嵌套架构中的特定值,而无需授予文档其余部分的权限。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/