繁体   English   中英

Firebase Realtime数据库安全规则-检查其他节点

[英]Firebase Realtime database security rules - check other node

我想保护数据安全,同时允许用户在Firebase Realtime数据库中获取属于他们可以访问的“类别”的“笔记”。 我想避免重复和维护访问条目-因此访问仅存储在类别中。 只有该类别的作者才能访问该类别中的“注释”。

数据库结构:

"categories" : {
  "category_001": {
    "access": {
      "author": "user-001"
    }
    "data" : {
      "title": "My first category"
    }
  }
}
"notes" : {
  "note_001": {
    "data" : {
      "note": "Hello world!",
      "categoryId": "category_001"
    }
  }
}

Firebase规则:

{
  "rules": {
    "notes": {
      ".read": "
        auth.uid !== null &&
        query.equalTo === auth.uid
      ",
      "data": {
        ".read": "
        root.child('categories').child('access').child('author').val() === auth.uid"
      }
    }
}

错误的数据库查询(不检查类别中的访问权限):

database.ref("notes")
  .orderByChild("access/author")
  .equalTo(`${user.uid}`)
  .once('value', (snapshot) => {
    snapshot.forEach( (data) => {
      console.log("OWNER", data.val().data.title)
    })
})

我如何编写数据库查询来检查“ categories / category001”节点的访问权限-同时读取“ notes / note001”节点?

亲切的问候/ K

由于您无法编写正确的查询,因此无法使用这种类型的规则。

您当前的查询:

database.ref("notes")
  .orderByChild("access/author")
  .equalTo(`${user.uid}`)

这是在尝试读取每个便笺的access/author属性,而这样的属性不存在。 Firebase在这里不会为您执行联接,因此查询将必须处理notes子代中的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM