我的“提要”文档中有一个字段表示userId。我想保护我的数据,以便只有用户才能使用自己的userId读取/写入提要条目。其他所有内容-只要经过身份验证,就允许用户读取/写入。
我是Firestore的新手,但到目前为止,我有这样的东西:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /feed/{feedItem} {
allow read, write: if request.auth.uid == resource.data.userId
}
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
不幸的是,这仍然允许对包括提要项在内的所有内容进行读写访问。
答案 0 :(得分:2)
这些规则不会按照您期望的方式工作。
假设您在此处看到的字段名称与文档中的字段名称匹配,那么您在feed集合中限制对文档进行读写的规则就可以了。
但是,您使用match /{document=**}
进行“其他所有操作”的规则并不正确。无论您使用其他什么规则,该规则都会始终匹配整个数据库中的每个文档。因此,就像您现在编写的一样,每个用户仍然可以读写每个文档,包括“提要”中的文档,因为该规则始终允许它。
请记住以下有关安全规则工作方式的声明:
实际上,安全规则没有办法指定与其他规则有关的“其他所有内容”。相反,您需要做的是按照自己的规则按名称调用每个集合,并为其分配访问权限。是的,如果您有很多收藏品,这会很麻烦,但这是您唯一的选择。