java Firebase安全规则获取子级所需的多个查询
在我的数据库和安全规则中有一个名为Settings的表,非授权用户只能访问其中两个子项
"Settings":{
".read": "auth != null",
".write": "root.child('Users').child(auth.uid).child('rank').val() == 3",
"$id":{
".read": "$id == 'maintenance' || $id == 'welcomeList'"
}
},
但这样一来,我无法使用以下查询获得设置:
settingsRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
settings = dataSnapshot.getValue(Settings.class));
}
});
我必须询问两次才能得到我想要的。还有别的办法吗?因为我将来需要两个以上的孩子,我不想最后有5个不同的查询
settingsRef.child("maintenance").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
settings.setMaintenance(dataSnapshot.getValue(Integer.class));
}
});
settingsRef.child("welcomeList").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
settings.setWelcomeList(dataSnapshot.getValue());
}
});
# 1 楼答案
安全规则不会过滤数据。这意味着,在当前的数据模型中,确实需要执行两个读取操作
常见的解决方案是将公共设置和“稍微少一点”的公共设置分为两个顶级节点:
现在,所有用户都必须执行两次读取,一次用于需要身份验证的设置,另一次用于公共设置。但不管定义了多少公共属性,它现在都需要两次读取