在安全数据字段(用户不信任自己更新)和不安全数据之间构建Firebase表/对象是否有最佳实践?他们可以自行设置?
例如,用户可以在自己的users
对象中自由更改其名称或偏好设置,但他们不应该随意更改设置,例如,如果他们是付费用户,则是他们的电子邮件已确认或者对于用户的具体示例,user.name
应该由用户直接编辑,而user.email
只能通过我们自己的API进行更改,然后更新Firebase的记录。
这似乎必须是一个常见的要求,因为我基本上在我们需要的每个表中看到它。例如我们有users
,我们有projects
,我们在项目中有tasks
等等。对于每种数据类型,总会有用户可编辑的字段和不
那么哪种方法最佳实践?这有两种可能性:
secure_data:
users:
user1:
email:
user2:
projects:
tasks:
insecure_data:
users:
user1:
name:
user2:
projects:
tasks:
或者:
users:
user1:
secure:
email:
insecure:
name:
projects:
project1:
secure:
insecure:
tasks:
顺便说一句,this answer意味着我应该使用上面的第一个选项,但我想更一般地构建这个问题,看看是否确实有这方面的最佳实践。
答案 0 :(得分:4)
有一整套指南涵盖最佳做法,包括data structures和security related to auth的主题,其中包括现场演示。
由于previously linked问题已经涵盖了阅读安全数据的用例,我还假设您不会问同一个问题,并且您只对此感兴趣写限制。如果你想要阅读限制,那么这个问题是重复的;除非该路径中的所有数据都是可读的,否则您将无法在路径上进行迭代或查询。
写限制非常简单;仅授予对相关字段的写访问权。
例如,如果用户应该能够写入电子邮件而不是付费状态:
{
"rules": {
"users": {
"$uid": {
// allow write access to email but not paid status
"email": ".write": "auth.uid === $uid"
}
}
}
}