如果文档ID包含字符串,Firebase firestore安全规则允许

如果文档ID包含字符串,Firebase firestore安全规则允许,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我有以下资料: match /direct/{postId} { allow read, write: if postId.includes(request.auth.uid); } 但是,如果文档ID(postId)包含字符串,我只允许读写。“包含”在安全规则中不适用于我 编辑:它应该匹配一个子字符串,而不是整个文档id Edit2称为direct的集合,其中每个文档ID是一个字符串,其名称中包含两个UID。 任何帮助都将不胜感激。谢谢。文档ID是一个字符串,据我所知,在安全规则中没

我有以下资料:

match /direct/{postId} {
   allow read, write: if postId.includes(request.auth.uid);
}

但是,如果文档ID(postId)包含字符串,我只允许读写。“包含”在安全规则中不适用于我


编辑:它应该匹配一个子字符串,而不是整个文档id

Edit2称为direct的集合,其中每个文档ID是一个字符串,其名称中包含两个UID。


任何帮助都将不胜感激。谢谢。

文档ID是一个字符串,据我所知,在安全规则中没有
include
方法

但是它确实有一个
matches
方法,因此您可以使用该方法来测试文档ID是否包含带有正则表达式的子字符串

比如:

match /direct/{postId} {
   allow read, write: if postId.matches(request.auth.uid);
}
一种工作读取,其中
postId
与用户的UID匹配:

正在尝试读取其他文档:

更新:要测试子字符串:

  allow read: if postId.matches(".*"+request.auth.uid+".*");

尝试使用equals to。您是想确定
请求.auth.uid
是否正好等于
postId
,还是只是一个子字符串?子字符串匹配在这里似乎有点奇怪。它应该匹配一个子字符串,而不是整个文档。请编辑问题,以显示您试图使用这些规则允许的特定查询,这些规则的工作方式与您预期的不同。这也有助于查看实际数据。规则本身并不意味着什么,除非与查询和数据结合在一起。好吧,我做的编辑不起作用。另外,我对正则表达式非常陌生,如何使用它来创建字符串是否包含的规则?“它不起作用”不是很容易帮助的。在模拟器中测试后,我从Firebase控制台复制/粘贴了此规则。我现在还添加了测试的截图。如果你不能让它工作,我建议再试一次,如果它仍然存在:发布你的最小代码,或模拟器的屏幕截图。我现在看到哪里出了问题,并添加了第二个测试。