Firebase如何为树深处的2级随机ID的子级编写安全规则

2024-01-16

我有一个名为 (people) 的数据库节点,如下所示:

    people
    |
    |
    -------UserID1 //which is a random id
    |       |
    |       |
    |        ----UserId2 //which is a random id
    |            |
    |            |
    |            name:"some_name"
    |            id:"UserId2"
    |            image:"image_url" 
    |
    | 
    |
    -------UserId2
            |
            |
             ----UserId3
                 |
                 |
                 name:"some_name"
                 id:"UserId3"
                 image:"image_url"  

如果我们查看 (people / UserID1 / UserId2) 节点 :

由于 UserId1 和 UserId2 是 2 个随机 id,因此如果我们想向 UserId2 写入规则,我们会注意到它是 2 个随机 id 级别深度。

我想要的是在这个指定的路径中编写一条规则,其中包含以下内容:

1) people / UserId1 : 可以写为(UserID1) 和(UserId2)。

2)people / UserId1 :可以被(UserID1)和(UserId2)读取。

3) people / UserId1 / UserId2 :最终必须得到一个具有(名称,id,图像)的newData。

我该怎么做呢?

Thanks.


由于 Firebase 实时数据库规则的方式cascade https://firebase.google.com/docs/database/security#section-authorization进入更深的键,允许people/UserId1可写UserId2不建议,因为这将允许UserId2对其他用户存储的数据的写访问权限people/UserId1 like people/UserId1/UserId3.

但是,使用此特征,当我们深入了解数据结构时,我们可以“添加”具有读写权限的用户。

所以新的条件是:

  • people/UserId1- UserId1 具有读写权限
  • people/UserId1/UserId2- UserId2 具有读写权限
  • people/UserId1/UserId2- 必须始终包含“name”、“id”和“image”键
  • people/UserId1/UserId3- UserId2 无法读取/写入
{
"rules": {
  "people": {
    "$userId1": {
      "$userId2": {
        ".read": "auth.uid == $userId2", // add $userId2 to those granted read permission, cascades into deeper keys
        ".write": "auth.uid == $userId2", // add $userId2 to those granted write permission, cascades into deeper keys
        ".validate": "newData.hasChildren(['name', 'id', 'image'])" // any new data must have 'name', 'id' and 'image' fields.
      },
      ".read": "auth.uid == $userId1", // add $userId1 to those granted read permission, cascades into deeper keys
      ".write": "auth.uid == $userId1" // add $userId1 to those granted write permission, cascades into deeper keys
    }
  }
}

最后,如果还需要people/UserId1/UserId2/id等于UserId2,您可以更改".validate"执行此规则的规则:

".validate": "newData.hasChildren(['name', 'id', 'image']) && newData.child('id').val() == $userId2" // any new data must have 'name', 'id' and 'image' fields and 'id' must have a value of $userId2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase如何为树深处的2级随机ID的子级编写安全规则 的相关文章

随机推荐