gpt4 book ai didi

node.js - 允许用户仅在 firebase 上修改自己的数据

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:33 24 4
gpt4 key购买 nike

我正在尝试阻止黑客修改或查看我的 Firebase 数据库上的数据。我的数据库中的用户包含“身份验证”选项卡中所有用户的用户 ID。我可以让数据库只允许登录用户查看数据吗?

这是我的数据库结构:

Firebase数据库结构

enter image description here

我希望允许用户在“用户”中修改自己的用户 ID 条目,并且我希望仅允许管理员控制“订单”。我在 Electron 应用程序中使用 Firebase,因此客户端正在 Node.js 中连接到 Firebase

最佳答案

是的,使用Firebase Database Rules绝对可以做到这一点

您所描述的内容似乎由三个部分组成,但它们的组合也会影响您的编写方式。

我将首先分别检查这 3 部分,然后将它们组合起来。

仅由登录用户读取/写入

{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}

通过将其置于规则的顶层,您将阻止未通过受支持的 Firebase 身份验证方法之一登录的任何人进行任何读取或写入操作。

用户修改用户条目

{
"rules": {
"users": {
"$uid": {
".write": "auth.uid === $uid"
}
}
}
}

这指定在用户路径下,对于每个用户id(使用$uid语法将其指定为稍后使用的变量),仅在当前经过身份验证的用户id匹配时允许写入相同的 ID。

订单的管理员控制

{
"rules": {
"orders": {
".read": "auth != null && auth.token.isAdmin",
".write": "auth != null && auth.token.isAdmin"
}
}
}

我们对 orders 采取了与对 users 条目类似的方法,但我们没有检查用户 ID,而是简单地说只有管理员可以进行读取和写入操作orders 下的任何位置。

把它们放在一起

现在,如果这些规则以某种方式组合在一起,使得更具体的规则覆盖不太具体的规则(例如 CSS 选择器),那么我们可以简单地将上述所有规则合并在一起,如下所示:

{
"rules": {
".read": "auth != null",
".write": "auth != null",
"orders": {
".read": "auth != null && auth.token.isAdmin",
".write": "auth != null && auth.token.isAdmin"
},
"users": {
"$uid": {
".write": "auth.uid === $uid"
}
}
}
}

但是,Firebase 数据库规则在某种程度上与此相反。在较浅的规则中提供访问权限将覆盖任何尝试拒绝访问的较深的规则(尽管可以在较深的规则中授予更多权限)。因此,上述内容实际上将为任何登录用户提供对整个数据库的完全读/写访问权限。

有鉴于此,我们在组合这些时需要更加小心,以确保我们单独的意图保持有效。最重要的是,第一部分仅由登录用户读/写将是需要修改的部分,因为它位于顶层。

幸运的是,我们第 2 部分和第 3 部分中的规则无论如何都能满足我们从第 1 部分中获得的大部分内容。仅当您的数据库中只有 ordersusers 时,这才成立。我们唯一缺少的是针对usersread 规则。目前还不完全清楚您想要什么样的规则来读取用户数据,因为您只指定用户只能写入他或她自己的数据,所以我假设所有登录的用户都可以读取用户数据。

合并后变为:

{
"rules": {
"orders": {
".read": "auth != null && auth.token.isAdmin",
".write": "auth != null && auth.token.isAdmin"
},
"users": {
".read": "auth != null",
"$uid": {
".write": "auth.uid === $uid"
}
}
}
}

请注意,您需要在数据库的其他 Node 中复制 read 和/或 writeauth != null 规则如果您有它们,因为在这里您只展示订单用户

希望有帮助!

关于node.js - 允许用户仅在 firebase 上修改自己的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48454965/

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