因此,当我试图设置规则时,firestore规则出现问题,只有在集合中创建文档的人才能读写它。当我试图设置它们时,我总是被拒绝权限。这些是我目前的规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{uid} {
allow read, write: if request.auth != null && request.auth.uid == uid;
}
match /accounts/{document} {
allow read, write: if request.auth != null && request.auth.uid == resource.data.userId
}
}
}
我有两个集合,如上所示。我已经尝试了这些规则的许多变体,以便允许在accounts集合中创建文档的人看到它,而其他用户则无法看到,但我总是被拒绝权限。我在文档中有一个字段,可以获取userId和username,但不确定实际问题是什么。如果是flutter代码中的某些内容导致了它,这是我如何设置StreamBuilder的:
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('accounts')
.orderBy('siteName')
.snapshots(),
**编辑:**我发现将其作为子集合并使用这些规则是有效的!
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{uid} {
allow read, write: if request.auth != null && request.auth.uid == uid;
}
match /users/{uid}/accounts/{document=**} {
allow read, write: if request.auth != null && request.auth.uid == uid;
}
}
}
如果有更好的做法,或者如果有人能指导我什么是问题原来仍然,我将不胜感激!
1条答案
按热度按时间xtfmy6hx1#
Firebase安全规则不过滤数据,而只是确保您的代码不会尝试读取任何未经授权的数据。
知道了这一点,我们可以看到这段代码不符合规则的要求:
为了满足规则的要求,代码必须只请求当前用户的文档。因此,类似于: