我正在尝试以具有管理节点的用户身份读取所有事件节点, 如果不是管理员,则只能读取相关事件。 我无法使用此安全规则获取所有事件的问题。
"Event":{
"$uid": {
".read": "auth.uid == $uid || root.child('Users').child(auth.uid).child('admin').val() == 'admin'",
".write": true
}
我的请求如下所示:
var starCountRef = firebase.database().ref("Event/"); //trying to read all events as admin
starCountRef.on("value", (snapshot) => {
const data = snapshot.val();
答案 0 :(得分:1)
我们在这里遇到的问题是 RTDB 规则是自上而下工作的。这意味着如果顶部的一条规则拒绝访问,那么下面的一条规则并不重要。在您的情况下,将整个列表的访问权限授予管理员是没有问题的,但对于事件的每个所有者来说也是如此。因为那些可能不是管理员。并且只有将 In alpha: Hi
In beta: Hello
放在 uid 上方时才能访问整个列表。
我可以想出一种方法来让它发挥作用。有 .read
条规则。关于他们的更多信息here。
您可以这样编写规则:
query-based
然后您需要通过查询访问数据以获取它:
"Event":{
".read": "query.equalTo == auth.uid ||
root.child('Users').child(auth.uid).child('admin').val() == 'admin'"
}