【发布时间】:2018-09-29 20:56:17
【问题描述】:
我在 Firestore 中为文档设置安全规则而苦苦挣扎。使用 RTDB 可以为特定对象属性设置规则,我正在尝试对 Firestore 做同样的事情。
RTDB 代码:
"users": {
".read": true,
".indexOn": ["profile/name"],
"$uid": {
".read": "auth != null",
".write":
"$uid === auth.uid && !data.exists()",
"profile": {
"birthday": {
".write": "$uid === auth.uid"
},
"name": {
".write": "$uid === auth.uid"
},
"banned": {
".write": "root.child('admins').child(auth.uid).exists()"
}
}
}
}
在 Firestore 中的相同代码下方:
service cloud.firestore {
match /databases/{database}/documents {
match /users/ {
allow read
match /{$user} {
allow read: if request.auth.uid != null
allow write: if request.auth.uid == request.resource.id && exists(/databases/$(database)/documents/users/$(request.resource.id)) === false
match /birthday {
allow write: if request.auth.uid == request.resource.id
}
match /name {
allow write: if request.auth.uid == request.resource.id
}
match /banned {
allow write: get(/databases/$(database)/documents/users/$(request.auth.uid)).data.userType > 3
}
}
}
}
}
当我为子集合编写安全规则时,它工作正常。但是对于文档字段,它不起作用。这是不可能的还是匹配参考中有一个特殊的path 段? The documentation 对此没有任何说明。
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security