如何在Firebase中的用户之间共享数据? [英] How to share data between users in 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屋!