我无法在Firebase Realtime数据库中编写完成我想要的规则的规则。
我的数据库的结构如下:
{
"tokens": {
"-LWzK8PLDtDQhiTp_Els": {
"token": "exampleToken",
"uid": "c5vrppXCwbeo22hFCSlW3CBq5el1"
},
...
}
}
{
"rules": {
"tokens": {
".indexOn": ["uid", "token"],
".read": "auth != null",
".write": "auth != null",
"$token": {
".validate": "newData.hasChildren(['uid', 'token']) && newData.child('uid').val() == auth.uid"
}
}
}
}
我希望用户能够(1)读取token
中的现有子节点,其中token.uid == auth.uid
和(2)将新的子节点写入token
,但是(3)不读取整个token
节点。
目前,提供的规则允许任何经过身份验证的用户读取和写入token
中的各个节点以及整个token
节点,由于敏感数据可能位于另一个子节点中,因此这是不安全的token
中的任何给定用户都不应该访问的节点。我尝试的一切都太宽松或太严格,我无法找出完美的中间立场。