Firebase仅限制一个子节点的读取权限

时间:2018-05-04 06:08:01

标签: firebase firebase-realtime-database

我正在使用firebase创建一个应用程序,并且遇到了可用安全设置的一些问题。 该应用程序的数据模型非常简单,如下所示 -

posts : {
         "$postid":{
            "meta":{
                "state":true,
                "text" :"I should be read",
            },
            "likes":{uid1,uid2},
            "rating":{uid1,uid2},
            "comments":{uid1,uid2},
            "tag":{tag1,tag2},
            "category":{cat1,cat2},
            "status":{1},
            "content":{},
            "createdTime":{},
        }

    }

我已应用以下安全设置:

"posts":
{
    ".read" : "auth != null",

    "$postid" :
    {
        "rating"{".write" : "auth != null"}

    }
}

我想限制内部节点“评级”的读取权限。如何在不更改根节点读取规则的情况下应用此规则?

1 个答案:

答案 0 :(得分:0)

Firebase规则过滤掉了 - 因此,如果您在postid上有规则,则它会对整个子对象提供写入权限。

但是有两种不同的方法来保护内容。

选项1.指定预期的对象,我建议在Bolt上查看Data Validation

选项2.是指定具有写权限的每个子对象;

"posts": {
  ".read": "auth != null",
  "$postid": {
    "meta": {
      ".write": "auth != null"
    },
    "likes": {
      ".write": "auth != null"
    },
    "comments": {
      ".write": "auth != null"
    },
    "tag": {
      ".write": "auth != null"
    },
    "category": {
      ".write": "auth != null"
    },
    "status": {
      ".write": "auth != null"
    },
    "content": {
      ".write": "auth != null"
    },
    "createdTime": {
      ".write": "auth != null"
    }
  }
}

您需要调整对象的写入方式,这会产生大量与数据库的额外交互。

理想的解决方案是将评级转移到不同的对象,例如;

"ratings": {
  ".read": "auth != null",
  "$postid": { 
     // New location of the rating
  }
}