【发布时间】:2019-05-24 16:00:02
【问题描述】:
我有一个名为公告的集合,用于存储数据。但是,每个文档都有一个名为“permissions”的字段,其中包含一个权限级别字符串。我编写了函数来根据用户的权限级别和资源的权限级别确定用户是否具有访问权限。
当我为应该工作的单个文档设置 onSnapshot 回调时,我得到了响应。一旦我将它切换到获取集合的快照,它就会得到一个无效的权限错误。根据我的发现,如果用户有可能无法访问集合中的任何文档,firestore 就会失败。我应该使用什么型号?如何获取用户也应该有权访问的文档?
规则
match /chapters/{chapter} {
function isMember() {
return exists(/databases/$(database)/documents/chapters/$(chapter)/members/$(request.auth.uid))
}
function getUser() {
return get(/databases/$(database)/documents/chapters/$(chapter)/members/$(request.auth.uid))
}
function hasPermission(userPermission, documentPermission) {
return documentPermission == "all" || userPermission == "admin" || userPermission == documentPermission
}
allow read: if isMember()
match /announcements/{announcement} {
allow read: if isMember() && hasPermission(getUser().data.permissions, resource.data.permissions)
}
}
作品vvv
firestore.collection("chapters").doc("chapter-1").collection("announcements").doc("doc1").onSnapshot(doc => {
const announcements = doc.data()
console.log(announcements)
})
不工作vvv
firestore.collection("chapters").doc("chapter-1").collection("announcements").onSnapshot(docs => {
docs.forEach(doc => {
const announcements = doc.data()
console.log(announcements)
})
})
【问题讨论】:
标签: javascript firebase google-cloud-firestore firebase-security