如果文档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控制台复制/粘贴了此规则。我现在还添加了测试的截图。如果你不能让它工作,我建议再试一次,如果它仍然存在:发布你的最小代码,或模拟器的屏幕截图。我现在看到哪里出了问题,并添加了第二个测试。