Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firestore安全规则:使用数组_contains确定授权_Java_Google Cloud Firestore_Firebase Security - Fatal编程技术网

Java Firestore安全规则:使用数组_contains确定授权

Java Firestore安全规则:使用数组_contains确定授权,java,google-cloud-firestore,firebase-security,Java,Google Cloud Firestore,Firebase Security,我可以在Firebase安全规则中使用等效的array\u contains 我有一个Event类(对应于events集合中的Event文档)。每个文档都有一个subscribers列表/数组,其中包含应该能够查询此事件的所有用户的UID: { . "subscribers" : ["uidA", "uidB", "uidC"], . } 更明确地说,用户应该能够运行查询: db().collection("events").whereArrayContains("s

我可以在Firebase安全规则中使用等效的
array\u contains

我有一个
Event
类(对应于
events
集合中的
Event
文档)。每个文档都有一个
subscribers
列表/数组,其中包含应该能够查询此事件的所有用户的UID:

{
    .
    "subscribers" : ["uidA", "uidB", "uidC"],
    .

}
更明确地说,用户应该能够运行查询:

db().collection("events").whereArrayContains("subscribers", "uidC");
如何编写此安全规则

我试过:

match/events/{eventId} {
    allow list: if request.auth.uid in resource.data.subscribers;
}
模拟器告诉我访问将被拒绝

使用这样的函数也会报告访问被拒绝:

function isSubscriber() {
    return resource.data.subscribers.includes(request.auth.uid);
}

match/events/{eventId} {
    allow list: if isSubscriber();
}

多亏了@DougStevenson的建议,我使用了以下规则:

match/events/{eventId} {
    allow list: if request.auth.uid in resource.data.subscribers;
}
然后让我的Android开发者从他的设备上尝试一个查询,结果成功了

不要盲目相信Firestore安全规则模拟器,它是谎言

Firebase安全规则文档:(显然它也适用于Firestore)


(PS:是的,完全知道Firestore仍处于测试阶段)

您在控制台模拟器之外尝试过这些吗?大家都知道它有一些问题。在我看来,控制台无法准确地模拟列表类型规则,因为它只适用于查询,而您不能在模拟器中执行查询。您是否在客户端应用程序中而不是在模拟器中尝试过实际查询?是否在控制台之外尝试过。它没有显示语法错误,但由于我在文档中没有找到类似的示例,我不知道它是否有效。我来试一试。你说得对(谢谢!),规则是resource.data.subscribers中的if request.auth.uid实际上在实践中起作用。但是,中的
运算符未记录(通过另一个SO问题发现)。我可以在任何地方报告此问题吗?
中的
操作符都有文档记录,所有列表操作都有文档记录:发生类似情况时,请随时提交错误报告: