嵌套集合的Firestore安全规则

时间:2018-02-26 14:31:53

标签: google-cloud-firestore firebase-security firebase-security-rules

我的安全规则如下:

match /xxx/{yyy}{
    allow read: if resource.data.zzzId == request.auth.uid;
}    
match /xxx/{yyy}/aaa/{bbb}{
    allow read: if resource.data.zzzId == request.auth.uid;
}

字段zzzId出现在yyybbb文档中,并且具有相同的值。现在,在Android应用中,我有两个FirestoreRecyclerAdapters,一个用于xxx集合中的文档,另一个用于内部文档,用于aaa集合中的文档。第一个适配器显示数据,而另一个适配器因InsufficientPermisions错误而失败。

我已经使用安全规则进行了一些盲测,并且我已经验证了bbb文档的请求设置为request.auth.uid,当我对该值进行硬编码以进行比较时,它可以正常工作。因此,resource.data.zzzId部分必然会出现问题,即。它在规则中得到了错误的值(或者根本没有值)。

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

事实证明这是一种在子集合中查询数据的错误方法。当我为whereEqualTo字段添加zzzId子句时,一切正常。 Firebase文档实际上在某处提到它,但我现在找不到它。