我的“提要”文档上有一个字段,代表用户ID。我想保护我的数据,以便只有用户才能使用自己的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;
}
}
}
不幸的是,这仍然允许对包括提要项在内的所有内容进行读/写访问。
这些规则不会按照您期望的方式工作。
如果您在此处看到的字段名称与文档中的字段名称相匹配,您在feed集合中限制对文档进行读写的规则就可以了。
但是,您对match /{document=**}
的“其他所有内容”的规则不正确。不管您的其他规则是什么,此规则始终匹配整个数据库中的每个文档。因此,正如您现在编写的那样,每个用户仍然可以读写每个文档,包括“ feed”中的文档,因为该规则始终允许它。
谨记以下有关安全规则工作方式的陈述:
实际上,安全规则没有办法指定与其他规则有关的“其他所有内容”。相反,您需要做的是按照自己的规则按名称调用每个集合,并为其分配访问权限。是的,如果您有很多收藏品,这很麻烦,但这是您唯一的选择。