对于 Firebase 实时数据库的安全规则,公共数据和私有数据可以使用如下规则存在于同一棵树中。
但是,在使用 Firestore 时,我们似乎无法做到这一点,因为我们可以检索的数据只是在 collection 或 document 下。当公共数据和私有数据在同一个文档中定义并使用集合/文档获取数据时,如果我们不是所有者,我们会收到私有数据权限不足的错误。
使用 RTDB 时,我们可以获取 'users/{userId}/publicInfo' 的数据,因为我们对集合/文档一无所知。
有什么办法可以用 Firestore 做到这一点?否则,我们应该分别进行公共/私人收藏吗?
// rule of Firebase Realtime Database
"users": {
"$user_id": {
".read": "auth.uid === $user_id",
".write": "auth.uid === $user_id",
"private": {
".read": "auth.uid === $user_id" // --- private data
}
"public": {
".read": "auth !== null"; // --- public data
}
}
}
// Firestore
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
match /{private=**} {
allow read, write: if request.auth == userId;
}
match /{public=**} {
allow read, write: if request.auth != null;
}
}
}
}