2016-01-30 2 views
1

Я новичок в firebase, и я тестирую, если это хорошо для моего следующего проекта. В качестве упрощенного примера моего проекта я дам список TODO. Я хочу, чтобы разные клиенты регистрировались с помощью электронной почты и пароля и после входа в систему, чтобы получить доступ только к своей части базы данных. После этого каждый клиент должен иметь возможность создавать пользователей своей части приложения с разными привилегиями. В качестве примера клиент является семьей. Они используют мое приложение todo. У отца есть админы, сын может читать только массаж и т. Д. Другая учетная запись дефилирует familly и т. Д. Таким образом, у каждой учетной записи должна быть копия всех трех узлов. Я должен быть чем-то вроде многостраничного приложения. Клиенты выиграли Не сообщайте какие-либо данные, поэтому я не думаю, что было бы неплохо поместить все подобные данные в одну таблицу. Так что я думаю об этом:Организуйте базу данных Firebase для многопользовательского приложения

account1 
     users 
     user 1 
      name : John 
      type : Admin 
     user 2 
      name: Ben 
      type: User 
     todolist 
      massages 
      1 
       author : John 
      2 
       author : Ben 
     appsettings 
      1 
      some settings 
...... more nodes 


----------------------------------- 

account2 
    users 
     user1 
     name : Jen 
     type : users 
     user2 
     name : Sam 
     todolist 
     massages 
      1 
      author : Jen 
.....same tables like account1 

Это правильный способ структурирования моей базы данных и что было бы правильным способом для организации моего процесса входа в систему? Владелец учетной записи должен войти в систему с помощью электронной почты и пароля, после чего у каждого пользователя должен быть пароль для доступа на основе его настроек в узле настроек учетной записи.

ответ

0

Это хороший вопрос, но есть несколько вопросов, которые необходимо решить, которые помогут прояснить вопрос и ответ.

У пожарной базы нет таблиц. Это структура данных JSON с узлами; родители и дети как таковые (и это концептуальное)

app_node 
    parent_node_1 
    child_node_1 
     child_of_child_node_1 
    child_node_2 
     child_of_child_node_2 
    parent_node_2 
    child_node_1 
    etc 

Что это означает, что все ваши данные приложения существует в одном узле приложения - так что нет никакого выбора, кроме как хранить все ваши данные приложения в это пространство. однако есть способы заставить его «разделять» данные.

Предположим, что parent_node_1 был a_family, а parent_node_2 - b_family.

Способ предотвращения доступа a_family к данным b_family осуществляется через правила. Вы настраиваете свои правила, чтобы пользователи a_family могли только читать/записывать данные на узел a_family.

(концептуально)

.read 
    authentication = true and this user is a member of a_family 
.write 
    authentication = true and this user is a member of a_family 

На практике это будет выглядеть примерно так:

"$user_id": { 
    ".read": "auth != null && $user_id == auth.id && $user_id exists in node a_family/users" 

Пользователи могут читать только/запись из узлов, которые принадлежат к их семье, поэтому путь $ user_id будет равный их auth.id

Есть проблемы с дизайном приложений, где вы хотите иметь полностью отдельные пространства для своих данных, но у Firebase есть несколько новых инструментов. e, что упростит правила для этих ситуаций.

Вы должны просмотреть раздел Firebase Security and Rules и специальное примечание к информации о компиляторе болтов.

+0

Если я использовал базу данных SQL, я бы построил другую базу данных для каждого клиента. Предполагается, что это будет какое-то программное обеспечение для управления запасами или что-то в этом роде. Каждый клиент является независимым. В мире firebase я предполагаю, что я мог бы использовать разные корневые узлы для каждого клиента и этот узел будет дочерними узлами, необходимыми для работы приложения. Это возможно. Я думаю, что я попытаюсь что-то построить и проверить, но мне нужно услышать некоторые советы. Я могу иметь идентификатор корня для каждого клиента, чтобы они могли использовать приложение с такими адресами, как этот xxxxxx.firebaseapp.com/accoun1 под этим корнем. структура аналогична. –

+0

В SQL вы правы. Однако это NoSQL, поэтому нет возможности иметь разные корневые узлы для каждого клиента.Как я уже упоминал в своем ответе, вы можете иметь your_app.firebase.com/account1 и your_app.firebase.com/account2, а затем использовать правила, чтобы держать пользователей учетной записи1 в узле account1. – Jay

+0

В качестве продолжения я хотел бы предложить вам изучить Firebase, так как его способности и производительность хорошо подходят для такого приложения. Тем не менее, наличие конфиденциальных разделенных данных не является сильной стороной для Firebase, поэтому вам необходимо соответствующим образом закодировать его и опираться на правила (сильно), чтобы заставить его работать. Я предложил команде Firebase, предлагающей какую-то структуру группы для пользователей и данных, действительно откроет Firebase до совершенно новой сферы разработки приложений. – Jay

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