Firestore Firebase 规则:使用路径存在权限失败。 PERMISSION_DENIED 缺少权限或权限不足

时间:2021-01-20 17:36:07

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

我有一个 chat_members 集合。所有聊天成员都是与特定聊天相关的对象。 UserOrganization 可以在 Chat 中并且都是聊天成员中的外键。

聊天成员都通过 chat_session id 关联。聊天成员的 ID 是用户 ID + 聊天会话 ID。这样做的原因是将 id 用于规则。

要获取特定用户的聊天信息,我们将搜索用户 ID 与登录用户 ID 匹配的聊天成员。

FirebaseFirestore.instance
        .collection("chat_members")
        .where('user', isEqualTo: uid)

为了获得其他成员,我们会搜索聊天会话 ID 匹配的聊天成员,但我在第二次搜索时遇到权限错误。

FirebaseFirestore.instance
        .collection("chat_members")
        .where('chat_session', isEqualTo: chatSesssionId)
        .where('user',isNotEqualTo: userUid)
        .get()

型号:

    ChatSession:
        id
        name
        description
    
    ChatMember:
        id // chat_session + user
        user // foreign key 
        university // foreign key 
        organization // foreign key 
        business // foreign key 
        chat_session // foreign key 
    
    ChatMessage:
       id
       text
       date
       chat_member // foreign key 
       chat_session // foreign key 

功能:

    function isAuthenticated(){
        return request.auth != null;
    }
    function getChatIdFromMemberId(memberId){
        return get(/databases/$(database)/documents/chat_members/$(memberId)).data.chat_session;
    }
    function hasAccessToChat(chatId){
        return exists(path("/databases/" + database + "/documents/chat_members/" + chatId + request.auth.uid ));
    }

规则:

    match /chat_members/{memberId}{
      allow read:  if isAuthenticated() && hasAccessToChat(getChatIdFromMemberId(memberId));
    }

权限输出:

enter image description here

表示:PERMISSION_DENIED missing or insufficient permission

知道如何解决此规则权限问题吗?

0 个答案:

没有答案