【发布时间】:2018-03-27 08:18:19
【问题描述】:
在实时数据库中,当对单个值调用更新时,如果未在请求中指定,安全规则将评估数据库中存在的值。
在 Firestore 中,我们必须为 Firestore resource.data 中已存在的数据或请求 request.resource.data 中的数据创建规则。
这导致您必须复制带有 or 条件的安全规则来检查当前数据,以便可以更新单个值。
构建安全规则以为一组数据值中的每一个指定一个条件,同时仍允许更新单个数据的最佳方法是什么?
match /subscriptions/{uid} {
allow read: if request.auth.uid == uid;
allow write: if request.auth.uid == uid
&& request.resource.data.keys().hasAll(['allowedTerminals', 'activeTerminals'])
&& request.resource.data.allowedTerminals is int && request.resource.data.allowedTerminals > 0
&& request.resource.data.activeTerminals is int;
}
鉴于此安全规则,当我最初提供 activeTerminal 和 allowedTerminal 值时,我可以成功创建新订阅,但如果我想更新 activeTerminal 值,我必须提供 allowedTerminal 值作为好吧,否则更新将返回权限被拒绝错误。
【问题讨论】:
标签: security firebase-security google-cloud-firestore