我已阅读Firebase文档,并想知道Firebase规则如何影响用户在应用中的体验。假设您根据Firestore规则与该群组分开,则只能访问群组。那么你是不是要查询member.uid == auth.uid所有的组(就像你没有规则一样),你会查询"组"集合,用户只会收到他们分开的群组?
每当我阅读有关Firestore规则的内容时,他们几乎都会给出相同的示例,而不会提供用户在查询数据库时会看到的内容的示例。如果有人可以指出我正确的方向,或者展示我如何测试这样的东西,那将非常感激。
答案 0 :(得分:3)
那么你是不是要查询member.uid == auth.uid所有的组(就像你没有规则一样),你会只查询“groups”集合,而用户只会收到他们分开的组的?
Firebase规则无法过滤数据。您不能让客户端读取整个集合,然后期望规则返回该集合中的文档子集。
这样做的原因是只有在附加了侦听器/观察者之后才会对其进行验证,之后他们才能访问数据。为了使实时更新性能可以接受,这是必要的。
虽然无法使用规则来过滤数据,但可以使用它们来验证查询。有关此示例,请参阅Firestore documentation on securely querying data:
service cloud.firestore { match /databases/{database}/documents { match /stories/{storyid} { // Only the authenticated user who authored the document can read or write allow read, write: if request.auth.uid == resource.data.author; } } }
拒绝此查询:
// This query will fail db.collection("stories").get()
但允许这一个:
var user = firebase.auth().currentUser; db.collection("stories").where("author", "==", user.uid).get()
你可以看到我们基本上是从规则中的代码重复这个条件。这允许您基于(例如)用户的UID安全地公开集合中的文档子集。
答案 1 :(得分:0)
firebase规则只是为了防止应用程序中的垃圾邮件以及其他内容。
如果您使用read:true
和write:true
,那么任何人都可以读取和写入数据库,这就是使用它的原因:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null;
}
}
}
这样,只有经过身份验证的用户才能看到从数据库中检索的数据,或者可以将数据发送到数据库。
如果您在群组中有用户并使用了此功能:
service cloud.firestore {
match /databases/{database}/documents {
// Match any document in the 'groups' collection
match /groups/{group} {
allow read, write: if true;
}
}
}
这意味着该组的所有成员都可以从该数据库中读取数据,因此如果您在该组中,则数据将显示在您的应用程序中。
更多信息:
https://firebase.google.com/docs/firestore/security/rules-structure