编辑:在/sf/answers/3141380511/查看答案后,我仍然不知道为什么有必要使用 双重转义句点,'\\.'
特别是因为文档清楚地表明这'\.'
是预期的语法(请参阅下面的第二个示例)。答案也引用了第一个示例 ( '.*\..*'
),但用双转义 ( '.*\\..*'
) 进行了修改,但我相信这仍然会失败,原因如下所述。
我试图memberUIDs.some_ID_here
在句点字符上拆分字符串,但 Firestore 安全规则文档与规则编辑器中允许的语法之间存在一些差异。
安全规则提供了一种.split()
字符串方法:https ://firebase.google.com/docs/firestore/reference/security/#split :
// Allow documents named "user.*" to be uploaded
match /{document} {
allow write: if user.split('.*\..*')[0] == 'user'
}
Run Code Online (Sandbox Code Playgroud)
文档中还有一个示例,显示了句点字符的分割,具有不同的正则表达式:
// Allow read if a document has the string 'user' in it
match /{document} {
allow read: if 'user' in document.split('\.');
}
Run Code Online (Sandbox Code Playgroud)
第一个问题与第一个示例有关。如果您实际使用此正则表达式,它会匹配整个字符串,这将不允许您在句点字符上进行分割;它以整个字符串作为分隔符,从而产生一个由两个空字符串组成的数组。
第二个问题是第二个例子。这个正则表达式应该正确工作,并且它可以在在线正则表达式编辑器的测试中工作;但是,在函数中使用此正则表达式时,规则编辑器会引发语法错误split()
。事实上,如果您尝试'\.'
在任何地方使用该字符串,编辑器会抛出语法错误。
现在,我正在使用'\\.'
我的正则表达式,它不会在编辑器中触发语法错误,但我认为它运行不正常:
match /groups/{groupID} {
allow write: …
Run Code Online (Sandbox Code Playgroud)