我有一个连接到Firestore数据库的角度项目。
我有一个用户集合,其中的用户文档里面有一个嵌套集合,名为 hugeCollection 。 我希望客户端无法访问这些嵌套集合,因此我将默认的Firestore规则更改为以下内容:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/hugeCollection/{document} {
allow read : if false;
allow write : if false;
}
}
}
我的问题是,我的角度项目仍然可以在文档中获取subCollection。使用此规则设置,我得到的唯一结果是控制台日志出现在浏览器的控制台中,显示:
ERROR Error: Missing or insufficient permissions
如果我将以下规则修改为将 false 更改为 true ,则控制台错误不会显示。这没关系。但是我想, false ,不应该查询那些子集。
我做什么或认为不好?谢谢你的帮助。
答案 0 :(得分:1)
好的,我发现了问题所在。
Firestore离线工作。因此,在我制定规则之前,我可以一次到达子集合,它将数据存储在本地。
接下来,当我创建规则时,在我的角度项目中,它首先检查了脱机缓存,并从中获取数据。然后检查,如果与在线数据库相比有任何变化。由于这种情况下的规则不允许达到它,它会抛出错误,并在浏览器的控制台中显示它。
我发现它是因为我更改了firebase控制台中的一些数据,但是角度项目仍然加载了旧数据。这就是我通过离线数据缓存实现它的方法。
我尝试使用浏览器的“空缓存和硬重载”功能清除firestore缓存,但它无法正常工作。然后我以隐身模式加载了我的项目,那里没有被规则拒绝的数据被加载。然后普通模式浏览器窗口也刷新了firestore缓存,所以现在他们也无法加载被拒绝的数据。
我希望它可以帮助某人解决某些问题。