【发布时间】:2020-08-19 00:12:15
【问题描述】:
我正在使用 Firebase 数据库来存储学生/教师数据库。现在我的规则允许教师通过调用提供与学生相关数据的可调用函数来读取学生的数据。 (Firebase 管理员 SDK)
我想做什么 -
- 允许教师邀请学生将他们添加到他的学生列表下。教师可以通过调用 http firebase 函数发送邀请,通过电子邮件发送邀请。
- 一旦学生点击邀请链接接受,他们就会被添加到向他们发送邀请的老师的下方。
- 接受后,教师可以通过调用可调用函数来读取他注册的所有学生的数据。这是我有问题的地方。我可以毫无问题地正确阅读,但每次刷新页面时调用一个函数会很昂贵,因此我决定使用 firebase 规则。
以下是我的 firebase 数据库结构。如何设计数据库规则,使教师无需调用可调用函数即可读取学生数据。
我在stackoverflow post 上发现了类似的东西 -
数据库
{
"teachers":
{
"teacher-unique-id":
{
"invited":
{
"auto-gen-key-id": "student-email-id-1",
"auto-gen-key-id": "student-email-id-2",
"auto-gen-key-id": "student-email-id-3",
"auto-gen-key-id": "student-email-id-4",
"auto-gen-key-id": "student-email-id-5",
},
"accepted":
{
"auto-gen-key-id": "unique-student-id-1",
"auto-gen-key-id": "unique-student-id-2",
"auto-gen-key-id": "unique-student-id-3",
}
}
},
"students":
{
"unique-student-id-1":
{
"session-id-1":
{
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
},
"session-id-2":
{
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
}
},
"unique-student-id-2":
{
"session-id-1":
{
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
},
"session-id-2":
{
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
"auto-gen-key-id": "data",
}
}
}
}
Firebase 规则 - 这基本上是我使用的默认规则。如何修改它们以实现我想要实现的目标?
{
/* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
"rules": {
"teachers":{
"$uid":{
"studentsId":{
".read": "$uid===auth.uid",
}
}
},
"students":{
"$uid":{
".read": "$uid===auth.uid",
".write": "$uid===auth.uid"
}
}
}
}
【问题讨论】:
标签: firebase firebase-realtime-database firebase-security