【问题标题】:Firebase different security rules for different childFirebase针对不同孩子的不同安全规则
【发布时间】:2019-08-26 16:39:36
【问题描述】:

我的数据结构是这样的。

我希望只有管理员才能创建新用户, 只有管​​理员可以写 expireDate, admin 和 user 都可以写另外两个字段,

我尝试了这些数据库规则:

{
  "rules": {

      "users":{

              "$uid": {

                ".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()",

                "expireDate":{
                                        ".write": "root.child('admins').child(auth.uid).exists()"
                },

                "firstLoginAttempt":{
                    ".write": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()"
                },

                  "macAddress":{
                    ".write": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()"
                }


      } 
      }

我允许管理员为所有孩子写信,但管理员无法创建新用户。我知道firebase数据库规则级联覆盖,但是这里如何实现。

【问题讨论】:

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


    【解决方案1】:

    一旦您在 JSON 树中的某个级别授予用户(读取或写入)访问权限,您就不能再在树中的较低级别取消该权限。

    这意味着:

    1. 更多人可以写入的数据应该位于 JSON 树中的较低级别。
    2. 或者您需要根据需要的访问级别将数据放在不同的顶级注释中。

    由于您的数据结构不遵循#1 的指导,因此意味着您应该遵循#2。

    类似:

    users: {
      user1: { ... },
      user2: { ... }
    expiries
      user1: { ... },
      user2: { ... }
    

    然后通过以下方式保护这两个顶级节点之间的访问:

    {
      "rules": {
        "users":{
          "$uid": {
            ".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()",
        },
        "expiries":{
          "$uid": {
            ".read": "root.child('admins').child(auth.uid).exists()",
        }
      } 
    }
    

    【讨论】:

    猜你喜欢
    • 2020-01-30
    • 2019-04-15
    • 2016-09-28
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多