Firestore 安全规则 - 我可以查询具有特定字段的文档吗?

Esb*_*ald 9 firebase-security google-cloud-firestore

您能否制定运行查询以检查是否找到匹配文档的安全规则?

我正在构建一个系统,登录用户可以在其中对特定主题进行投票。

每一个投票都将保存在自己的文档中,其中包含对用户、主题等的引用。

我想制定一个安全规则,检查投票部分中是否已经存在具有该特定用户 ID 和主题 ID 的文档,并且只让用户编写投票文档,但事实并非如此。

我在文档中看不到任何查询选项,那么我的选项是什么?

我可以以某种方式创建所有投票的索引,并在该索引中查找特定的文档路径吗?

或者我应该根据用户 ID 和主题 ID 给投票一个自定义 ID 方案,以便可以找到它们?

Dou*_*son 7

您不能使用带有安全规则的条件执行查询。您所能做的就是get()使用其已知路径的文档。也就是说,您必须知道它的所有集合和唯一标识它的文档 ID。

听起来创建其他文档可能是可行的(它们不必包含任何数据),并且它们的存在可以表示您想要保护的条件。

(是的,有时数据建模必须考虑安全规则。)


obe*_*van 0

对于那些仍然感兴趣的人来说,这种情况现在已经改变了。

请参阅https://firebase.blog/posts/2022/09/announcing-cross-service-security-rules/

您现在可以使用这些功能firestore.get()firestore.exists()查询安全规则内的数据库。

然而,即使请求被拒绝,这些函数也会产生额外的读取。