使用Firebase数据库规则禁用特定子项的写入

时间:2018-05-14 07:37:03

标签: javascript node.js firebase firebase-realtime-database

我之前发布了question有关Firebase数据库规则的信息。这个问题不够具体,因为我不知道错误的实际原因。由于我没有为我的问题找到任何有用的解决方案,我发布的问题更具体。

我正在为我的网络应用程序使用Firebase实时数据库。我在数据库中维护以下结构:

{
    Users:{
        userID:{
            Name
            Post
        }
    }
}

我希望经过身份验证的用户具有名称的读写权限。但我不希望他们拥有发布的写入权限。

所以,我尝试使用以下数据库规则:

"rules": {
    "Users": {
      ".read": "auth != null",
      "$userID": {
        ".write": "auth.uid == $userID && !newData.hasChild('Post')"
      }
    }
 }

问题是,此规则拒绝名称发布节点的写入权限。当我尝试使用以下代码编写名称时,我收到权限被拒错误:

firebase.database().ref().child('Users/' + user.uid + '/Name').set(name).then(function(){
       // Do something
});

我在写规则时做错了吗?我应该如何编写数据库规则来禁止对发布节点的写入权限?

更新:目前,我已经通过以下方式单独为每个孩子编写规则来解决这个问题:

{
  "rules": {
    "Users": {
      ".read": "auth != null",
      "$userID": {
         "Name": {
            ".write": "$userID == auth.uid"
         },
         "Post": {
            ".write": false
         }
       }
     }
   }
}

但是当我有很多子节点时,这会产生一个非常冗长的规则。如果有人建议更简单的方法来编写规则以禁止对特定子节点的写访问,那将会很有帮助。

0 个答案:

没有答案