我的数据库的结构是如此……
我想对“用户/ uid”和“用户/ uid /位置/ $ address / latlng”节点具有不同的读/写规则。
"users": {
"$uid": {
".read": "auth != null && $uid == auth.uid",
".write": "auth != null && $uid == auth.uid",
"locations": {
"$address": {
"latlng": {
".read": true,
".write": false,
}
}
}
}
}
由于规则级联,看来这是不可能的。读写都在我希望失败的地方通过。基本上,我希望用户能够在locations节点下创建地址和latlng节点,但只能让某些用户在address节点下创建其他节点。
这是可能的还是我需要以不同的方式构造数据库?
编辑:
这是我用于将信息存储到数据库中的代码
mRootRef.child("users").child(user.getUid()).child("locations").child(currentAddress).child("latlng").setValue(currentLatLng.latitude + "," + currentLatLng.longitude);
这是我从数据库中检索信息的代码
mRootRef.child("users").child(user.getUid()).child("locations").child(selectedItem).child("verified").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//Check if address is verified
if(dataSnapshot.getValue() == null){
ChangeVerifiedMessage(false);
return;
}
if (dataSnapshot.exists()){
ChangeVerifiedMessage(true);
}else{
ChangeVerifiedMessage(false);
}
}
答案 0 :(得分:1)
您可以尝试使用validation来实现所需的功能。您可以验证在特定情况下不存在子代(在您的情况下为latlng)。验证不是级联的,因此您可以用它替换您的写入规则。这可能是一个小解决方法,但我想到的唯一想法就是无需重组数据。