Firebase规则允许某些用户访问

时间:2016-10-28 06:12:02

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

enter image description here 我希望 user2,user3才能查看来自DB的用户1的信息以及用户4。

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

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

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

到目前为止我的编辑

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

    }

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

1 个答案:

答案 0 :(得分:7)

因此,您只希望ID位于Allowed节点的用户读取其他用户信息。正确?

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

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

<强> [增订]

$uid是$ variables的示例(您可以为其指定不同的名称,但必须以$开头),它会动态获取Users位置下的键值。

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

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

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

在firebase规则中有predefined variables,例如nowrootauthdatanewData和{{3} }。

  

如果规则结构中有$ location,则可以使用   在规则表达式中匹配$ variable以获取其名称   实际的孩子被读或写。所以假设我们想要给每一个人   用户对自己/用户/位置的读写访问权限。我们   可以使用:

从firebase文档$ variables

复制

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

https://firebase.google.com/docs/reference/security/database/#location

P.S。

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

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