带安全规则的Firestore where子句

时间:2018-12-25 21:48:06

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

假设有以下规则

service cloud.firestore {
    match /databases/{database}/documents {
        function roomAccess() {
            return resource.data.allow_anonymous == true || (request.auth.uid == resource.data.uid);
        }
        function writeOnlyOwner() {
            return request.auth.uid == resource.data.uid;
        }
        match /rooms/{room_id} {
          allow read: if roomAccess();
          allow write: if writeOnlyOwner();
          allow create: if request.auth.uid != null;
        }   
    }
}

这也是集合rooms中的文档的样子 Json format

问题 是否可以查询将access_key设置为某个值的特定房间?

 db.collection('rooms')
            .where('access_key', '==', access_key)
            .get()

请务必注意,我查询的是房间的creator(并且与我的room.uid相匹配的uid

尽管如此,它在访问权限上失败。 而且文档似乎没有描述这种行为。

据我了解,查询失败,因为可能有some个房间,其中access_key会为此roomAccess()失败。 但是我似乎找不到解决方法。

1 个答案:

答案 0 :(得分:1)

我的问题是我应该一直在检查 resource.data.allow_anonymous == true || request.auth.uid != null,因为我想在用户通过身份验证或公开的情况下进入会议室。

在这种情况下,access_key查询检索到的所有文档都与安全性约束相符