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

Firebase 如何使用变量在安全规则中构建Firestore文档的路径,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我正在编写一条规则,允许在我的集合中创建新文档,其结构如下所示: field1="value-1" field2="value-2" field3="other-miscellaneous-values" 仅当Side_集合中没有文档ID为以下格式的文档时,才允许此操作: value-1:value-2 其中,“value-1”来自文档字段“field1”,“value-2”来自“field2”,并用冒号分隔 以下是我正在尝试的规则: allow create: if !exists(/{d

我正在编写一条规则,允许在我的集合中创建新文档,其结构如下所示:

field1="value-1"
field2="value-2"
field3="other-miscellaneous-values"
仅当Side_集合中没有文档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'. 

我尝试了上面的一些变体,但没有任何效果。

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

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


好啊这篇文章的编辑很好。但这些评论都不见了。问题仍然存在。我正在读这篇文章,但仍然有一些问题。一个问题是,当我尝试插入冒号时,总是会出错。
exists(
  /databases
  /$(database)
  /documents
  /Side_Collection
  /$(request.resource.data.field1 + ":" + request.resource.data.field2);