Firebase 的“规则不是过滤器”约束的解决方法

2024-01-07

我想要一个安全规则,允许任何人获取用户列表并读取他们的姓名,但只允许登录用户查看自己的电子邮件。

这是一个数据结构示例:

    "User" : {
        "abc123" : {
          "name" : "Bob",
          "email" : "[email protected] /cdn-cgi/l/email-protection"
        }   
    }

安全规则的一种简单方法可能是执行以下操作:

"User" : {
    "$user" : {
        "name" : {
            ".read" : true
        },
        "email" : {
            ".read” : "auth.uid === $user"
        }
    }
}

但是,由于用户级别没有读取规则,因此读取列表的请求将被拒绝。但是在用户级别添加读取规则将覆盖电子邮件规则,并使每个子节点都可读(请参阅规则级联 https://www.firebase.com/docs/security/guide/securing-data.html#section-cascade在 Firebase 的安全指南中)。

安全指南确实指出规则不是过滤器 https://www.firebase.com/docs/security/guide/securing-data.html#section-filter,但没有提供太多关于如何处理的指导。

我应该将我的用户实体分为 PrivateUser 和 PublicUser 吗?


让任何人都能获得用户列表并读取他们的名字。并允许登录用户查看自己的电子邮件。

Zac https://stackoverflow.com/users/389379/zac says:首先考虑访问,然后对完全公开或完全私有的对象进行建模。

Type 1:

{"rules":{
  "user_publicly":{"$user:{
    ".read":true,
    "name":{}
  }},
  "user_privately":{"$user:{
    ".read":"auth != null && $user == auth.uid",
    "email":{}
  }}
}}

Type 2:

{"rules":{
  "user":{"$user:{
    "public":{
        ".read":true,
        "name":{}
    },
    "private":{
        ".read":"auth != null && $user == auth.uid",
        "email":{}
    }
  }}
}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 的“规则不是过滤器”约束的解决方法 的相关文章

随机推荐