【发布时间】:2020-12-08 06:08:12
【问题描述】:
我设置了一个简单的安全规则,它使用一个函数来确定用户是否可以访问系统中的容器,每个 container 和每个 user 都有一个 owner 字段,以下比较但是不起作用:
查询:
await firebase.firestore().collection('containers').where('owner', '==', owner)
.get()
.then(({ docs }) => {
const containers = getters.get_containers;
const containersArray = docs.map(doc => ({ id: doc.id, ...doc.data() }));
docs.forEach(doc => (containers[doc.id] = doc.data()));
commit('set_containers', containers);
commit('set_containers_array', containersArray);
})
function getUser() {
return get(/databases/$(database)/documents/users/$(request.auth.uid));
}
function canAccessContainer(container_id) {
return (getUser().data.owner == get(/databases/$(database)/documents/containers/$(container_id)).data.owner);
}
match /containers/{container_id} {
allow read: if isAuthenticated() && canAccessContainer(container_id) <------- not working
allow update: if isAuthenticated() && isUserInOrg();
allow create: if isAuthenticated() && isUserInOrg() && !docExists(container_id, 'containers');
allow delete: if isAuthenticated() && isUserInOrg();
}
【问题讨论】:
-
安全规则本身不做任何事情。它们仅在与执行查询的应用程序代码配对时才有意义。请编辑问题以显示未按您期望的方式工作的查询,以及规则运行所需的任何数据库文档。问题中应该有足够的信息,任何人都可以重现该问题。
-
刚刚意识到我可以使用资源变量。谢谢。
-
如果您已完成此问题,请删除它或自己回答。
-
老实说,我在争论是否花钱请人帮我做这些,文档让人无法弄清楚
标签: firebase google-cloud-firestore firebase-security