Firebase:如何授予添加新节点的权限,但只有所有者才能修改它们?

Firebase: How to grant permission to add new nodes but only the owner can modify them?

我对 Firebase 规则有疑问。

我只想向经过身份验证的用户授予对书籍节点的写入权限(添加新书)。另外,我希望只有书的所有者才能修改一本书。这是我的数据库和我的规则:

o- books 
  o- book1 
    o- owner : user1
    o- name : nice book
    o- pages { ... }
    o- users { ... }

  o- book2
    o- owner : user2
    o- name : other book
    o- pages { ... }
    o- users { ... }

这里是规则

{
  "rules": {
    "books": {
      ".write": "auth != null",
      "$bookId": {
        ".read": "data.child('users').hasChild(auth.uid)",
        "pages" : {
          ".write": "data.child('owner').val() == auth.uid"
        }
      }
    }
  }
}

问题是在 /books/book1 中使用经过身份验证的 user2 授予写入操作,因为第一个写入 (auth != null) 是真实的...

感谢任何帮助, 非常感谢。

当您在 books 分支下设置写入权限时,您将授予用户写入权限以写入其下的任何数据。所以我猜你正在寻找类似以下的东西:

{
  "rules": {
    "books": {
      "$bookId": {
        ".write": "newData.child('owner').val() == auth.uid && (!data.exists() || data.child('owner').val() == auth.uid)",
        ".read": "data.child('users').hasChild(auth.uid)"
      }
    }
  }
}

这将确保用户所做的任何更改都将包含他的 uid。还有,如果不是新书,就是他的书。