我有一个 chat_members
集合。所有聊天成员都是与特定聊天相关的对象。 User
或 Organization
可以在 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));
}
权限输出:
表示:PERMISSION_DENIED missing or insufficient permission
知道如何解决此规则权限问题吗?