Firebase 实时规则

Posted

技术标签:

【中文标题】Firebase 实时规则【英文标题】:Firebase RealTime Rules 【发布时间】: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
    
  

【问题讨论】:

【参考方案1】:

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


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

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

【讨论】:

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

以上是关于Firebase 实时规则的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 实时数据库规则拒绝权限

Firebase 实时数据库规则被拒绝权限

Firebase 实时数据库规则

Firebase 实时规则如何检查具有 AutoID 的节点是不是包含正确的数据

Firebase 实时数据库,安全规则 - 检查其他节点

如何在firebase实时数据库中编写规则?