我对Firebase安全感到困惑。这就是为什么。
例如,我有以下数据库:
clients: {
$key: {
//client data
}
}
trainer: {
$key: {
//trainer data
}
}我需要一个客户能够看到自己的信息。我需要一个培训师能够看到所有客户的信息,但不是其他培训师。
这样客户端A、B和C就可以看到他们的个人隐私数据了。但是培训师A只能看到客户A和B的详细信息(他不培训C)。
我遇到的问题是,例如,您似乎不能请求所有客户端,而只返回使用安全规则签出的客户端。正如文档所述,如果列表中的一个返回false,那么整个簇都会返回。
如何创建正确的结构和安全规则?
发布于 2017-03-08 01:30:37
类似于Firebase文档(https://firebase.google.com/docs/database/security/user-security)中的示例,这可能适用于您。
我认为至少你的结构可以从客户和培训师之间的直接关键联系中受益。就像这样
clients: {
clientA: {
trainerKey: "trainerA"
}
}
trainers: {
trainerA: {
clients: { clientA: true, clientB: true }
}
}安全规则-编辑以包括用户
"clients": {
".read": "auth !== null && (root.child('trainers/' + $trainerKey + '/clients').child($uid).exists() || auth.uid == $uid")
}这a)检查用户是否被认证,以及b)查看客户端是否在训练者的客户端列表中,或者这是否是客户端。
这是未经测试的,但希望能让你达到你想要的目标。我还假设您的客户端ID与其身份验证ID相同。
发布于 2017-03-08 12:31:51
你应该隐含一些东西,比如将客户添加到trainer中作为朋友。创建一个与之共享的节点,其中包含训练者作为子节点,而训练者将包含A&B客户端密钥及其数据。
https://stackoverflow.com/questions/42652911
复制相似问题