2015-03-27 2 views
1

В базе данных, как это:Как делиться данными между пользователями в Firebase?

{ 
    "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" 
     } 
    } 
    } 
} 

Учитывая, что bobtony добавить Эндрю Ли, как его друг, как Эндрю Ли может читать bobtony сообщения? Аналогичный вопрос задал here, но без хорошего решения. Я знаю, что у меня может быть правило, позволяющее читать сообщение, но пользователи «друга» просто не знают пути их чтения.

Update: После того, как потратить некоторое время на обдумывание, я получил:

{ 
    "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" 
     } 
    } 
} 

Таким образом, было бы хорошо иметь что-то вроде этого? Таким образом, я могу пройти через своих клиентов и своих партнеров.

ответ

2

Если вы настроили ваши данные, как так:

{ 
    "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" 
     } 
    } 
    } 
} 

Вы можете установить правила, чтобы один пользователь может написать в /messages/received другого пользователя, если UID отправляющего пользователя находится в «/ друзей» из принимающего пользователя.

{ 
    "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(), чтобы убедиться, что запись в sent успешно, только если запись в received успешно.

+1

Фактически, «сообщения» будут «потребителями», поэтому мне нужно иметь список клиентов, совместно используемый с другими пользователями. Итак, добавив пользователя как «друга» или «партнера», он будет работать с теми же клиентами. Я начинаю думать, что Firebase не относится к моей бизнес-модели. –

+0

@ MárcioSouzaJúnior вы пришли к выводу об этом? В настоящее время я использую Couchbase Server и Couchbase Lite, который очень хорошо решает эту проблему; но его немного тяжело на сервере (требуется 8-16 ГБ экземпляра для бесперебойной работы с Sync Gateway), поэтому мне интересно, может ли Firebase удовлетворить мои потребности лучше или, по крайней мере, сократить расходы на сервер – Adamski

+1

@Adamski, я пришел к выводу, что Firebase dont удовлетворить мои потребности. По-прежнему используется MySQL на стороне сервера и SQLite на клиенте. –

Смежные вопросы