Mar*_*oet 6 javascript firebase-security google-cloud-firestore firebase-security-rules
我需要让匿名用户能够更新嵌套体系结构中的特定值,而无需对文档的其余部分授予权限.
events 是一个顶级集合,我更新我的文档是这样的
update(`events/${event.id}`, {
[`boardgames.${boardgameId}.votes.${uid}`]: true,
})
Run Code Online (Sandbox Code Playgroud)
我试过这个解决方案
allow update: if ((request.writeFields.size() == 1) && ('boardgames' in request.writeFields));
Run Code Online (Sandbox Code Playgroud)
如这里提到但它失败了(两个半部也独立失败).
我错过了什么?当'进入'嵌套对象时,我不会只更新一个字段吗?
能够console.log 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)
Run Code Online (Sandbox Code Playgroud)
小心: request.writeFields 已被弃用,但不幸的是没有好的替代品可以解决您的问题
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |