如何在Firebase中的用户之间共享数据? [英] How to share data between users in Firebase?

查看:174
本文介绍了如何在Firebase中的用户之间共享数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这样的数据库中:


$ b

{
users:{
simplelogin:213:{
provider:password,
name:bobtony,
friends :{
Andrew Lee:true,
James Tamplin:true
}
},
twitter:123:{
提供者:twitter,
name:Andrew Lee,
friends:{}
},
facebook:456:{
provider:facebook,
name:James Tamplin,
friends:{bb b}
},
messages :{
simplelogin:213:{
-JkpwAnieKjQVsdtPD4m:{
content:Hello World
}
}
}

$ / code>

考虑到bobtony加上Andrew Lee朋友,安德鲁·李怎么能读到bobtony的消息?一个类似的问题在这里,但没有好的解决方案。我知道我可以有一个规则允许阅读消息,但朋友用户只是不知道读取它们的路径。



更新:花了一些时间在想,我得到了:


$ b

{
用户:{
user1:{
name:bobtony,
partners:{
user2:{
:true
}
},
customers:{
customer1:true,
customer2:true
//数百客户
},
orders:{
order1:true,
order2:true
//数百个订单
} $
customers:{
customer1:{
name:james
}
}


$ / code>

所以,这个?这样我就可以遍历我自己的客户和我的合作伙伴客户。

>
$ b {
users:{
simplelogin:213:{
provider:password,
name:bobtony,
friends:{
twitter:123:Andrew Lee,
facebook:456:James Tamplin
},
messages:{
sent:{
-JkpwAnieKjQVsdtPD4m:{
内容:Hello World,
uid:twitter:123
}
}
}
},
twitter:123 :{
provider:twitter,
name:Andrew Lee,
friends:{
simplelogin:213:bobtony

messages:{
received:{
-JkpwAnieKjQVsdtPD4m:{
content:Hello Wor ld,
uid:simplelogin:213
}
}
}
},
脸书:456:{
provider:facebook,
name:James Tamplin,
friends:{
simplelogin:213:bobtony
}





你可以设定规则如果发送用户的uid位于接收用户的/ friends中,则一个用户可以写入另一个用户的 / messages / received
$ b

{
rules:{
users:{
$ user_id:{
.read:auth.uid === $ user_id,
.write:auth.uid === $ user_id,
messages :{
received:{
.write:root.child('users')。child($ user_id).child('friends')。hasChild(auth.uid)
}
}
}
}
}
}

您需要使用 Firebase.transaction() 确保写入发送只有在写入 成功时才会成功。


In a database like this:

{
  "users": {
    "simplelogin:213": {    
      "provider": "password",
      "name": "bobtony",
      "friends": {
        "Andrew Lee": true,
        "James Tamplin": true
      }   
    },
    "twitter:123": {
      "provider": "twitter",
      "name": "Andrew Lee",
      "friends": {}
    },  
    "facebook:456": {
      "provider": "facebook",
      "name": "James Tamplin",
      "friends": {}
    }   
  },  
  "messages": {  
    "simplelogin:213": {    
       "-JkpwAnieKjQVsdtPD4m" : {
          "content" : "Hello World"
      }
    }  
  }  
}

Considering that bobtony add Andrew Lee as his friend, how Andrew Lee can read bobtony messages? A similar question asked here, but without good solution. I know I can have a rule to allow reading the message, but the "friend" users just does not to know the path to read them.

Update: After spend some time thinking, i got:

{
  "users": {
    "user1": {  
      "name": "bobtony",
      "partners": {
        "user2": {
            "accepted": true
        }
      },
      "customers":{
        "customer1": true,
        "customer2": true
        // hundreds of clients
      },
      "orders":{
        "order1": true,
        "order2": true
        // hundreds of orders
      }     
    }
  },  
  "customers": {  
    "customer1": {  
       "name" : "james"
      }
    }
}

So, would be ok to have something like this? This way I can traverse my own customers and my partners customers.

解决方案

If you set up your data like so:

{
  "users": {
    "simplelogin:213": {    
      "provider": "password",
      "name": "bobtony",
      "friends": {
        "twitter:123": "Andrew Lee",
        "facebook:456": "James Tamplin"
      },
      "messages": {
        "sent" : {
          "-JkpwAnieKjQVsdtPD4m" : {
            "content" : "Hello World",
            "uid" : "twitter:123"
          }
        }
      }
    },
    "twitter:123": {
      "provider": "twitter",
      "name": "Andrew Lee",
      "friends": {
        "simplelogin:213": "bobtony"
      },
      "messages": {
        "received" : {
          "-JkpwAnieKjQVsdtPD4m" : {
            "content" : "Hello World",
            "uid" : "simplelogin:213"
          }
        }
      }
    },  
    "facebook:456": {
      "provider": "facebook",
      "name": "James Tamplin",
      "friends": {
        "simplelogin:213": "bobtony"
      }
    }   
  }
}

You can set the rules so that one user can write to the /messages/received of another user if the sending user's uid is in the '/friends' of the receiving user.

{
  "rules": {
    "users" : {
      "$user_id" : {
        ".read": "auth.uid === $user_id",
        ".write": "auth.uid === $user_id",
        "messages" : {
          "received" : {
            ".write" : "root.child('users').child($user_id).child('friends').hasChild(auth.uid)"
          }
        }
      }
    }
  }
}

You'd need to use Firebase.transaction() to make sure the write to sent only succeeds if the write to received succeeds.

这篇关于如何在Firebase中的用户之间共享数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆