如果用户ID在文档中,则允许用户读取子集合

时间:2019-06-08 15:26:39

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

一段时间以来一直在使用Firebase规则,但我无法获得想要的结果

数据库:

db

,然后子集合“聊天”包含所有消息

我想要的是使用户“ 3”无法进入并加入聊天,并且Firebase规则仅允许文档中具有其UID的两个用户继续进行“聊天”子集合限制基于UID的访问

先前尝试

    service cloud.firestore {
  match /databases/{database}/documents {

    match /Messages/{MessageId} {
        allow write, read: if isOwner(userId);
    }

    function isOwner(userId) {
        return request.auth.uid == resource.data.uid;
    }
  }
}

如果您能指出正确的方向,那将是我的迷茫!

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找

service cloud.firestore {
  match /databases/{database}/documents {

    match /Messages/{MessageId} {
        allow write, read: if isOwner();
        match /chats/{id} {
            allow write, read: if isParticipant();
        }
        function isParticipant() {
            return isOwner() ||
                get(/databases/$(database)/documents/Messages/$(MessageId)).data[2]
                    == request.auth.uid
        }
    }

    function isOwner() {
        return request.auth.uid == resource.data.uid;
    }
  }
}

如果当前用户是此聊天的所有者或其他参与者,则允许对消息进行读/写访问。