{ "rules": { "chats": { "$chatId": { "info": { ".read": "auth != null && root.child('chats').child($chatId).child('members').child(auth.uid).exists()", ".write": false }, "members": { ".read": "auth != null && root.child('chats').child($chatId).child('members').child(auth.uid).exists()", "$userId": { ".write": "auth != null && auth.uid === $userId" } }, "messages": { ".read": "auth != null && root.child('chats').child($chatId).child('members').child(auth.uid).exists()", "$msgId": { ".write": "auth != null && root.child('chats').child($chatId).child('members').child(auth.uid).exists() \n && newData.child('text').isString() \n && newData.child('senderName').isString() \n && newData.child('createdAt').isNumber()" }, ".indexOn": ["createdAt"] } } }, "userChats": { "$userId": { ".read": "auth != null && auth.uid === $userId", "$chatId": { ".read": "auth != null && root.child('chats').child($chatId).child('members').child(auth.uid).exists()", ".write": "auth != null && root.child('chats').child($chatId).child('members').child(auth.uid).exists() \n && newData.child('lastMessage').isString() \n && newData.child('lastMessageTime').isNumber() \n && newData.child('senderName').isString()" }, ".indexOn": ["lastMessageTime"] } } } }