如何使用变量在安全规则中构建Firestore文档的路径

时间:2019-11-21 16:13:55

标签: firebase google-cloud-firestore firebase-security

我正在编写一条规则,以允许向结构如下的My_Collection创建新文档:

field1="value-1"
field2="value-2"
field3="other-miscellaneous-values"

仅在Side_Collection中没有使用以下格式的文档ID的文档时,才应允许这样做:

value-1:value-2

其中“ value-1”来自文档字段“ field1”,“ value-2”来自“ field2”,并用冒号分隔。

这是我要尝试的规则:

allow create: if !exists(/{database}/Side_Collection/{request.resource.data.field1}:{request.resource.data.field2});

这是我收到的错误消息:

Error saving rules - Line 24: Unexpected '}'.; Line 24: Missing 'match' keyword before path.; Line 24: Unexpected '.'.; Line 24: mismatched input 'request' expecting '}'; Line 24: Unexpected ':'.; Line 24: Unexpected ')'.; Line 30: Unexpected 'match'. 

我尝试了以上几种方法,但没有任何效果。

1 个答案:

答案 0 :(得分:1)

如果要在路径构造中插入一些变量值或表达式,则必须使用$()来隔离该表达式。 accessing other documents的文档中对此进行了讨论。

在您的情况下,您可能希望像这样构建传递给exist()的路径(为方便阅读,我添加了回车符,您将希望删除它们):

exists(
  /databases
  /$(database)
  /documents
  /Side_Collection
  /$(request.resource.data.field1 + ":" + request.resource.data.field2);