假设我有两种对象用户和帐户。用户可以拥有多个帐户并与其他用户共享。因此Account1可能对User1和User2可用。虽然AccountB仅适用于User1。所以User1有两个帐户,User2有一个帐户。
构建此基础的“firebase”方法是什么?
我最初认为用户可以分别存储他们所属的帐户数组。
users: {
1: {
name: 'Ted',
accounts: [1, 2]
}
2: {
name: 'Frank',
accounts: [1]
}
}
accounts: {
1: {
name: "Checking"
},
2: {
name: "Savings"
}
}
或者帐户会有一组用户。
users: {
1: {
name: 'Ted'
}
2: {
name: 'Frank'
}
}
accounts: {
1: {
name: "Checking",
users: [1, 2]
},
2: {
name: "Savings"
users: [1]
}
}
我想知道哪种方式让我能够轻松找到用户的帐户,以便在Ted登录时我可以列出他所属的帐户而无需拉下整个数据库。为了安全起见,我不希望他的机器上有这些数据。
问题#1 安全规则会解决这个问题吗?我的意思是我打算设置我的安全规则,以便用户只能拥有他们所属的帐户。我希望如果我查询“/ accounts”,我将只收回用户可以访问的那些帐户......不是吗?
问题#2 是否有查询项目列表的机制。比如“/ accounts / [1,2]”,以便我收回帐户“/ accounts / 1”和“/ accounts / 2”?
感谢您分享的任何信息。
答案 0 :(得分:20)
在详细说明之前,您需要记住以下几点:
考虑到这一点,我建议像第一个例子那样存储数据,但不使用数组:
users: {
1: {
name: 'Ted',
accounts: {
1: true,
2: true
}
}
2: {
name: 'Frank',
accounts: {
1: true
}
}
}
accounts: {
1: {
name: "Checking"
},
2: {
name: "Savings"
}
}
这将让您轻松获取特定用户的所有帐户。如果您还需要能够转向另一个方向(帐户的所有用户),您还必须复制该信息并将其存储在帐户中。 E.g:
accounts: {
1: {
name: "Checking",
users: {
1: true,
2: true
}
},
2: {
name: "Savings",
users: {
1: true
}
}
}
希望这有帮助!