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 次 |
最近记录: |