我想向 Firestore 数据库(Firebase)发送一些信息,最好是键值对(但不一定),以便它可以使用它来评估规则中的访问权限(读取和写入时)。
但是,我不希望此信息成为路径的一部分。
例如,假设我有一些passParameters方法:
DocumentReference docRef =
db.collection("cities")
.document("SF")
.passParameters("abc", 123);
Run Code Online (Sandbox Code Playgroud)
然后我可以在编写规则时访问这些信息,如下所示:
service cloud.firestore {
match /databases/{database}/documents/cities/SF/ {
allow read, write: if request.parameters.abc == 123;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,以上只是一个示例。现实生活中的用例更加复杂。换句话说,不要过多关注示例本身,而是回答更通用的问题:是否有任何方法可以将不属于路径一部分的信息传递给安全规则?
我有一个 Firestore 数据库和一个用户。在用户通过 REST 请求登录后,我能够为他们检索 ID 令牌。
我将使用 ID 令牌请求从数据库读取/写入。
当安全规则打开时(任何人都可以读/写),我可以通过 Python 请求读取和写入 Firestore:
headers = {
'Content-Type': 'application/json',
}
url = 'https://firestore.googleapis.com/v1beta1/projects/[PROJECT_NAME]/databases/(default)/documents/[COLLECTION]/[DOCUMENT]'
r = requests.get(url, headers=headers)
Run Code Online (Sandbox Code Playgroud)
写法类似,略去。
尝试按照这些文档为实时数据库附加 ID 令牌会给出错误消息""Invalid JSON payload received. Unknown name \"auth\""...
我的问题是如何通过 REST 为 Firestore 授权用户 ID 令牌?
如果我理解正确[1],在Firebase中无法限制用户访问他们拥有的数据,也无法隐藏敏感列.在新发布的Firestore中这样更好吗?它有解决方法吗?
我能想到的另一种选择是通过云功能路由此类请求,以便根据需要进行过滤,而不是允许直接访问.可能有用吗?
[1] 使用安全规则限制子/域访问