Firebase数据库安全规则,使用Android仅访问用户生成的数据
我想创建聊天支持应用程序模型。我只有一个代理和许多请求查询的用户。每个用户都可以与代理进行多次对话(假设它就像一个whatsapp组,只有两个成员,一个用户和该代理) 因此,我创建了一个数据结构,如:Firebase数据库安全规则,使用Android仅访问用户生成的数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我想创建聊天支持应用程序模型。我只有一个代理和许多请求查询的用户。每个用户都可以与代理进行多次对话(假设它就像一个whatsapp组,只有两个成员,一个用户和该代理) 因此,我创建了一个数据结构,如: Conversation -uId -status -conversationTitle 至于信息 Message -conversationId -message -from //0 mean it from me to my friend and 1 for a message from m
Conversation
-uId
-status
-conversationTitle
至于信息
Message
-conversationId
-message
-from //0 mean it from me to my friend and 1 for a message from my friend to me
-timestamp
基本结构如下:
Conversation1:{ "uId": "1", "status":0, "conversationTitle": "First conversation"},
Conversation2:{ "uId": "2", "status":0, "conversationTitle": "Second conversation"},
Conversation1:{ "uId": "1", "status":0, "conversationTitle": "Third conversation"}
至于信息:
Message1: {"conversationId": "Conversation1", "message": "Hello there 1!", "from":0, "timestamp":******** },
Message2: {"conversationId": "Conversation1", "message": "Hello there 2!", "from":0, "timestamp":******** },
Message3: {"conversationId": "Conversation2", "message": "Hello there 3!", "from":0, "timestamp":******** },
Message4: {"conversationId": "Conversation3", "message": "Hello there 4!", "from":0, "timestamp":******** },
如您所见,消息1和2属于会话1,而会话1又属于uID为1的用户1
我希望与用户1(uId:1)和用户2(uId:2)发生的所有对话都不能看到1的对话
我把安全写为:
"conversations":{
"$uid":{
".read": "data.child('uId').val() == auth.uid",
".write":"auth != null && newData.child('uId').val() == auth.uid"
}
}
然后在Android中:
FirebaseDatabase database = FirebaseDatabase.getInstance();
Query conversationsRef = database.getReference("conversations");
FirebaseRecyclerAdapter<Conversation, ConversationHolder> binderData = new FirebaseRecyclerAdapter<Conversation, ConversationHolder>(Conversation.class, R.layout.item_butler_converastions, ConversationHolder.class, conversationsRef) {
@Override
public void populateViewHolder(ConversationHolder chatMessageViewHolder, Conversation chatMessage, int position) {
chatMessageViewHolder.setName(chatMessage.getTitle());
}
@Override
protected void onCancelled(DatabaseError error) {
super.onCancelled(error);
}
};
但是没有起作用。提前谢谢
Query conversationsRef = database.getReference("conversations").orderByChild("uId").equalTo(mAuth.getCurrentUser().getUid());