为多实例应用程序组织Firebase数据库

时间:2016-01-30 16:19:23

标签: firebase

我是firebase的新手,我正在测试它是否适合我的下一个项目。作为我的项目的简化示例,我将提供一个TODO列表。我希望不同的客户使用电子邮件和密码登录并在登录后获得只能访问他们自己的部分数据库。之后,每个客户端都应该能够创建具有不同权限的应用程序部分用户。例如,客户端是一个家庭。他们使用我的待办事项应用程序。父亲有管理员权限,儿子只能阅读按摩等等。另一个帐户是不同的家庭等等。所以每个帐户都应该有整个三个节点的副本。我应该像多实体应用程序。客户不会分享任何数据,所以我认为将所有类似的数据放在一个表中是不太好的。所以我认为abbout shema:

    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

这是构建我的数据库的正确方法吗?是什么方法可以设置我的登录过程?帐户所有者应使用电子邮件和密码登录,然后每个用户都应该拥有一些密码,以便根据帐户设置节点中的设置获取访问权限。

1 个答案:

答案 0 :(得分:0)

这是一个很好的问题,但有一些问题需要解决,这有助于澄清问题和答案。

Firebase没有表格。它是一个具有节点的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提供了一些新工具,可以使这些情况的制作规则变得更加容易。

您应该查看Firebase Security and Rules部分以及有关Bolt Compiler信息的特别说明。