我可以在Firebase安全规则中使用与array_contains
等效的内容吗?
我有一个Event
类(对应于Event
集合中的events
个文档)。每个文档都有一个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();
}
答案 0 :(得分:3)
由于@DougStevenson的建议,我使用了规则:
match/events/{eventId} {
allow list: if request.auth.uid in resource.data.subscribers;
}
然后让我的Android开发人员实际上尝试从他的设备进行查询,并且成功了!
不要盲目相信Firestore Security Rules的模拟器,这是谎言!
Firebase安全规则文档:https://firebase.google.com/docs/reference/rules/rules.List(显然它也适用于Firestore)。
(PS:是的,完全知道Firestore仍处于Beta版)