我的安全规则如下:
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
出现在yyy
和bbb
文档中,并且具有相同的值。现在,在Android应用中,我有两个FirestoreRecyclerAdapters
,一个用于xxx
集合中的文档,另一个用于内部文档,用于aaa
集合中的文档。第一个适配器显示数据,而另一个适配器因InsufficientPermisions
错误而失败。
我已经使用安全规则进行了一些盲测,并且我已经验证了bbb
文档的请求设置为request.auth.uid
,当我对该值进行硬编码以进行比较时,它可以正常工作。因此,resource.data.zzzId
部分必然会出现问题,即。它在规则中得到了错误的值(或者根本没有值)。
任何人都可以对此有所了解吗?
答案 0 :(得分:0)
事实证明这是一种在子集合中查询数据的错误方法。当我为whereEqualTo
字段添加zzzId
子句时,一切正常。 Firebase文档实际上在某处提到它,但我现在找不到它。