【问题标题】:Firebase RealTime RulesFirebase 实时规则
【发布时间】:2021-12-18 04:01:15
【问题描述】:

我的应用有一个管理面板,我想设置 firebase 规则,以便只有管理员可以在某些 firebase.Child 中放置新产品或项目

我希望孩子中唯一的用户(“管理员”)将被允许写入其他类别,如工作、私人、视频,那么如何让来自像管理员这样的参考的孩子只能访问其他孩子?

这是我当前的 firebase-RealTime 规则。

  {
  "rules": {
    "Admins": {
      ".read": true,
      ".write": false
    },
    "Users": {
        ".read": true,
            ".write": true,
          ".validate": "newData.hasChildren(['name', 'phoneNumber', 'uid'])",
          "name": {".validate": true},
          "phoneNumber": {".validate": true},
          "uid": {".validate": true},
          "$other": {".validate": false}
    },
    "PrivateWork": {
      ".read": "auth.uid != null",
        ".write": false
    },
    "Likes": {
      ".read": "auth.uid != null",
        ".write": "auth.uid != null"
    },
    "Work": {
      ".read": "auth.uid != null",
        ".write": false
    },
    "videos": {
      ".read": "auth.uid != null",
        ".write": false
    }
  }
}

【问题讨论】:

    标签: android firebase-realtime-database firebase-security


    【解决方案1】:

    要允许管理员全局写入权限,您可以像这样添加一个顶级规则:

    {
      "rules": {
        ".write": "root.child('Admins').child(auth.uid).exists()",
        "Admins": {
          ...
    

    由于permission cascades downwards,这也将授予他们对所有子节点的访问权限。

    【讨论】:

    • 谢谢。正如预期的那样,你总是回答得很快,如果可能的话,另一个小问题是正确的方法让“用户”孩子的阅读成为真实,我试图让它 auth.uid != null 所以只有授权才能看到用户信息,但是如果我这样做了,我将无法登录,因为登录前没有身份验证
    • 登录是对 Firebase 身份验证的调用,因此应该如此。根据数据库中的规则不会失败。如果您无法使其正常工作,我建议您使用自己的MCVE 发布一个单独的问题。
    • true 我可以登录但我不能注册新用户
    • 我刚刚尝试过,但它没有工作 firebase 仍然给我权限被拒绝错误,是因为我覆盖了规则,在每个孩子说假之后?
    • 权限向下级联。一旦您授予用户在根目录下的读取权限,他们就可以读取整个数据库。现在有办法撤销它。如果用户没有权限,则当您尝试从数据库中读取数据时,他们要么尚未登录,要么他们的 UID 未作为密钥存储在 Admins 节点中。
    猜你喜欢
    • 2021-12-20
    • 2021-01-31
    • 1970-01-01
    • 2020-08-08
    • 2020-02-16
    相关资源
    最近更新 更多