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

标签 android firebase firebase-realtime-database firebase-security

我对 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。而且,如果不是新书,那就是他拥有的书。

关于android - Firebase:如何授予添加新节点的权限,但只有所有者才能修改它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43242268/

相关文章:

ios - Swift 认为 Structure 中的变量是可选的

firebase - 计算 firestore Flutter 中值匹配的文档数量

javascript - AngularJS Firebase 注册表

java - 从 Single ValueEventListener 获取 firebase 引用

ios - Firebase:更新值的正确方法是什么?

java - 将 FirebaseDatabase jsonObject 转换为 jsonArray,然后将 jsonArray 转换为 .xlsx 格式

android - 不使用 GCM 为 Android 创建推送通知服务器

java - Android gson.toJson() 给出带有转义引号 (\") 的结果

android - 如何禁用标记点击事件?

java - 使用 Gson 解析复杂的 json 时遇到问题