父和子的单独的firebase数据库规则
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了父和子的单独的firebase数据库规则相关的知识,希望对你有一定的参考价值。
我的数据库结构如此......
我希望对“users / uid”和“users / uid / locations / $ 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节点,但只允许某些用户在地址节点下创建其他节点。
这是可能的还是我需要以不同的方式构建我的数据库?
编辑:
这是我将信息存储到数据库的代码
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);
}
}
答案
您可以尝试使用validation来实现您想要的效果。您可以验证,在特定情况下,子项(在您的情况下为latlng)不存在。验证不是级联的,因此您只需用它替换写规则即可。这可能是一个小小的解决方法,但是在没有重组数据的情况下我想到的唯一想法。
以上是关于父和子的单独的firebase数据库规则的主要内容,如果未能解决你的问题,请参考以下文章