与两个用户共享的集合的Firebase数据库规则

时间:2017-05-03 05:37:30

标签: firebase firebase-realtime-database firebase-security

我有这个集合

"connection-requests":{
    "push-key1":{
        "foo":"bar",
        "biz":"baz",
        "user1":{
            "some-info":"",
            "uid":"user1uid"
        },
        "user2":{
            "some-info":"",
            "uid":"user2uid"
        }
    }
}

我希望这个集合只有uid出现在这个集合中的两个用户才能读写。

这是我的数据库规则:

"connection-requests": {
    "$key": {
        ".read": "root.child('connection-requests').child($key).child('user1/uid').val() == auth.uid || root.child('connection-requests').child($key).child('user2/uid').val() == auth.uid",
        ".write": "root.child('connection-requests').child($key).child('user1/uid').val() == auth.uid || root.child('connection-requests').child($key).child('user2/uid').val() == auth.uid",
    }
}

我使用此请求访问数据:

db.ref('connection-requests')
    .orderByChild('user1/uid')
    .equalTo(uid) // <- auth.uid of user
    .once('value')
    .then()
    .catch()

上述规则不起作用,我的猜测是.child($any)部分有问题,但我不确定是什么。

提前致谢。

1 个答案:

答案 0 :(得分:0)

每条规则的结束双引号都是错误的。它不是在行的末尾,而是跟随OR运算符:

auth.uid || "root.child
            ^
            ^

应该是:

"connection-requests": {
    "$key": {
        ".read": "root.child('connection-requests') ... == auth.uid",
        ".write": "root.child('connection-requests') ... == auth.uid",
    }
}