gpt4 book ai didi

firebase - 如何在 Firebase 中过滤/隐藏属性

转载 作者:行者123 更新时间:2023-12-02 09:26:32 25 4
gpt4 key购买 nike

如何过滤/隐藏 Firebase 中的 secret 属性?

例如,如果我有一个数据存储:

"people": {
"ivan": {
"age": 23,
"location": "Australia"
"password": "123",
"underGroundLover": "JLo"
}
}

我想对普通观众隐藏passwordunderGroundLover,同时他们能够获取节点ivan

根据我的理解,Firebase 的授权/安全规则/节点获取逻辑只是“全有或全无”,因此如果我想从节点中过滤掉一些 secret 属性,我将不得不:

  1. 在将数据传递给用户之前,使用我自己的服务器/lambda 过滤掉 secret 。这违背了 BAAS 的目的。

  2. 使用奇怪的非规范化数据结构来分隔公共(public)可访问属性和需要权限的属性。这将引入大量的 n+1 查询。

选项 2 的带规则的非规范化数据结构将是这样的(我知道数据和规则不能共存):

{
"rules": {
"public": {
"people": {
".read": true,
"ivan": {
"age": 23,
"location": "Australia"
"passwordRef": "/non-public/people/ivan/password",
"underGroundLoverRef": "/non-public/people/ivan/underGroundLover"
}
}
},
"nonPublic": {
"people": {
".read": false,
"ivan": {
".read": false,
"password": {
".read": if(user === "ivan" || user.group = "admin" || user.group === "ivan's parent")
},
"underGroundLover": {
".read": if(user !== "ivan's wife")
}
}
}
}
}
}

还有其他更有效的方法可以实现过滤器吗?如果 Firebase 可以回答我,我也想知道为什么安全规则或数据获取必须是全有或全无?如果 Firebase 可以根据规则过滤/隐藏数据库,那不是很好吗?

最佳答案

一个可能的解决方案是简单地保留重复数据。 NoSQL 数据库和磁盘空间的常见做法是便宜...

对于所有想了解 Ivan 的用户:

"people_public": {
"ivan": {
"age": 23,
"location": "Australia"
}
}

以及仅供 Ivan 本人使用的私有(private)节点

"people_private": {
"ivan": {
"age": 23,
"location": "Australia"
"password": "123",
"underGroundLover": "JLo"
}
}

公共(public)用户通常只会查看 Ivan 的数据,而不是对其进行修改,因此如果 Ivan 决定搬到克利夫兰,他将是更新数据的人,因此使用多位置更新来更新两个节点。

这也确实简化了安全规则,因为用户只能访问他们自己在 people_private 节点中的节点。

关于firebase - 如何在 Firebase 中过滤/隐藏属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com