【问题标题】:Firebase rules to allow some user access允许某些用户访问的 Firebase 规则
【发布时间】:2017-03-10 23:46:13
【问题描述】:

我希望 user2、user3 从 DB 中查看 user1 的信息,不是 user 4。

我知道我需要在 JSON 规则中做一些事情:

THE UIDUser2, UIDUser3 当 User1 通过应用允许权限时,将替换为实际 ID。

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

这是到目前为止我的编辑:

 {
      "rules": {
    "Users":{
         "UIDHERE":{
                   ".read": auth.uid ==??
                   }
              }
      }

    }

如何完成规则?我想从Allowed 区域取回密钥到这里?

【问题讨论】:

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


    【解决方案1】:

    因此,您只希望 id 在Allowed 节点中的用户读取其他用户信息。对吧?

    如果是这样......这是它的规则。

    "Users": {
      "$uid": {
        ".read": "root.child('Users/Allowed/'+auth.uid).exists()"
      }
    }
    

    [更新]

    $uid 是 $ 变量的示例(您可以给它起不同的名称,但它必须以 $ 开头)动态获取 Users 位置下的键值。

    例如:我给你的规则只允许Allowed节点下的用户读取其他用户信息,但是如果这个用户不在,它会阻止用户读取自己的信息Allowed 节点。 如果你也想添加这个,你需要像这样改变你的规则。

    "Users": {
      "$uid": {
        ".read": "$uid == auth.id || root.child('Users/Allowed/'+auth.uid).exists()"
      }
    }
    

    ================================================ ===========================

    在firebase规则中有predefined variables,例如nowrootauthdatanewData$ variables

    当您的规则结构中有 $location 时,您可以使用 在规则表达式中匹配 $ 变量以获取 正在阅读或书写的实际孩子。所以假设我们想给每个 用户对自己的 /users/ 位置的读写权限。我们 可以使用:

    复制自 firebase 文档https://firebase.google.com/docs/reference/security/database/#location

    如果您想了解有关 Firebase 安全规则的更多信息,请阅读以下部分。

    https://firebase.google.com/docs/database/security/

    附言

    你的结构不太好。 Users 节点下的数据混乱。您不应将Allowed 节点与 userIds 处于同一级别。相反,如果您在 Users 节点级别创建新节点 (allowedUsers) 并将 Allowed 数据移动到那里会更好。

    AllowedUsers
      - userid2
      - userid3
    Users
      - userid1
      - userid2
      - userid3
      - userid4
    

    【讨论】:

    • 谢谢!你能解释一些术语吗? "$uid$ 是什么意思?
    猜你喜欢
    • 2019-09-24
    • 1970-01-01
    • 2017-10-08
    • 2018-10-22
    • 2020-11-28
    • 2012-05-26
    • 2020-09-22
    • 2020-06-09
    • 2020-05-24
    相关资源
    最近更新 更多