到目前为止,我对firebase的请求仅限于经过身份验证的用户。
现在,我想检查firestoredb中是否存在一个给定id的文档,而该文档没有经过身份验证,并且我不想通过标准安全规则直接允许来使我的整个文档树可读。我唯一需要的就是对存在的肯定或否定。
可能是";存在";安全规则是实现这一点的最佳方法,或者有针对这种情况的最佳实践吗?
您所描述的内容可以通过在安全规则中使用细粒度操作来实现。这里的关键概念是,read
规则可以分解为get
(用于读取特定文档(和list
操作(用于集合范围的读取和查询(。
在大多数默认规则中,您会发现读取操作如下:
match /yourCollection/{doc} {
allow read: if <condition>;
这允许任何用户读取或查询整个集合,只要它们符合条件即可。
如果你只想让用户能够阅读特定的文档,你可以使用get
而不是阅读:
match /yourCollection/{doc} {
allow get : if <condition>;
现在,对整个集合的任何查询或读取都会被自动拒绝,并且只允许进行单个文档读取操作,甚至只有在满足条件时才允许。
只需编写一个HTTPS触发的云函数,它只服务于这一个目的。这样就可以在不破坏安全措施的情况下检查文件的存在;即使猜测名字,当回答是真是假时,也几乎没有风险。