具有动态路径的安全规则

时间:2016-04-08 00:12:54

标签: firebase firebase-security firebase-authentication

假设我有一个具有以下结构的数据库:

  • 权限
    • $ pId(自动生成的推送ID)
      • 用户id
      • roomId
      • 许可
  • 用户
    • $的uId
      • 名称
    • $ RID
      • 名称

是否可以编写一条规则,如果存在权限p,允许用户修改空间,其中p.userId = auth.uid和p.roomId = $ rId和p.permission =&#39 ;管理员'"

据我所知,如果没有在每个房间下嵌套许可信息,就不可能。

1 个答案:

答案 0 :(得分:1)

您需要稍微更改一下结构。而不是使用推送ID来识别权限,而是使用更受控制的结构。例如:

"Permissions": {
  "roomId": {
    "userId": "role"
  }
}

现在您可以根据需要保护房间:

{
  "rules": {
    "Room": {
      "$rId": {
        ".write": "root.child('Permissions').child($rId).child(auth.Id).val() == 'admin'"
      }
    }
  }
}

另一个好处是,如果您想要撤销用户的许可,则无需扫描所有权限。