父和子的单独的firebase数据库规则

问题描述 投票:1回答:1

我的数据库结构如此......

Database structure

我希望对“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);

                            }

                        }
firebase firebase-realtime-database
1个回答
1
投票

您可以尝试使用validation来实现您想要的效果。您可以验证,在特定情况下,子项(在您的情况下为latlng)不存在。验证不是级联的,因此您只需用它替换写规则即可。这可能是一个小小的解决方法,但是在没有重组数据的情况下我想到的唯一想法。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.