【发布时间】:2018-05-11 14:27:17
【问题描述】:
我在 Firestore 安全规则中有这样的代码(仅显示相关部分):
match /users/{userId} {
function isUserDisabled(userId) {
return get(/databases/$(database)/documents/users/$(userId))
.data.admin == true;
}
allow read: if true;
allow write: if request.auth.uid == userId
&& !isUserDisabled(userId);
match /posts/{postId} {
allow read: if true;
allow write: if request.auth.uid == userId
&& !isUserDisabled(userId);
}
}
isUserDislabled() 是一个将在多个地方调用的函数。它将get() 用户的文档以查看用户是否被禁用。
问题是,第一次调用isUserDislabled() 会导致检查文档出现get(),是否需要额外阅读?我了解同一文档的多个get() 将只计费一次。但是,在这种情况下,它是特定文档的唯一 get()。
编辑 1: 似乎我的问题并不是我的意思。 (我不是以英语为母语的人。)问题是,当get() 到/users/{userId} 发生在match /users/{userId} 块(而不是子块)中时,get() 是否会导致额外的阅读?换句话说,在使用get() 和使用resource 变量之间(当然是指同一个文档时),成本是否相同?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security