Android Firebase规则-在社交应用程序上安全添加/删除好友

Android Firebase规则-在社交应用程序上安全添加/删除好友,android,firebase,firebase-realtime-database,firebase-security,Android,Firebase,Firebase Realtime Database,Firebase Security,我正在试用一款基于Firebase的社交应用程序,我想使用Firebase规则确保用户删除朋友 我存储朋友的数据库表的结构如下: Friends { user1 { user2 {friend_username=user2} user3 {friend_username=user3} } user2 { user1 {friend_username=user1} user3 {friend_username=

我正在试用一款基于Firebase的社交应用程序,我想使用Firebase规则确保用户删除朋友

我存储朋友的数据库表的结构如下:

Friends
{ 
     user1 
   { 
     user2 {friend_username=user2}
     user3 {friend_username=user3}
   }
     user2 
   { 
     user1 {friend_username=user1}
     user3 {friend_username=user3}
   } 

}
假设user1从他的朋友列表中删除user2,我当前的问题是如何正确地批准删除操作,因为它需要两次删除:首先从user1 friendlist中删除user2,然后从user2 friendlist中删除user1

我尝试了以下操作,但出现错误:

"FRIENDS" :{
  "$username":{ 
  //Users can read as long as they are authenticated and their auth.name matches the table key 
  ".read": "auth != null && auth.name === $username",
  //Delete should be allowed if the auth.name matches an entry in the table 'Friends' (first part of the deletion) and if the auth.name requesting the delete is included in the 'friend_username' value inside the user2 friends (second deletion) .  
    ".write": "auth != null && root.child('FRIENDS').hasChild(auth.name) && root.child('FRIENDS').child($username).child(auth.name).child('friend_username').val()=== auth.name"
请注意,我正在使用风扇更新来执行删除操作

我不能用一种适当的结构化方式来批准这个删除…有什么建议吗


谢谢

我建议使用云函数来为FialBASE设置一个触发器,以确保数据库在用户执行写入时是一致的。@道格史蒂文森谢谢,我也会考虑这个选项,但我更愿意使用一个规则,如果可能的话,它可以适合我的情况!fan方法也确保了一致性,但我这里的问题是确保安全性(这样某个用户就不能干扰friendlist中的其他条目)。您可以阻止对fan项的写访问,这样就没有人可以干扰它们,只保留对更改时要触发的位置的写访问权。@DougStevenson,这一点很好,但这只适用于函数情况,对吗?是的,我认为云函数是实现这一点的最佳方式。