用于身份验证用户的firebase实时数据库规则

时间:2019-02-17 10:32:36

标签: firebase firebase-realtime-database firebase-security-rules

如果我只希望身份验证用户可以将数据写入firebase,然后身份验证用户可以从其他身份验证用户读取数据,我应该使用什么规则。例如,用户A将数据写入数据库,我希望用户B也可以从用户A读取数据。

例如JSON:

<button (click)="newService.firstMethod(v1,v2)">

对于“用户信息”表,有2个身份验证用户,分别为Uid =“ 47NiYA7rGNa8nJvlnnxzpxhqvCl2”和Uid =“ LV4y2BXnNWWkJix6YwTRJV8LdQs2”。因此,我希望每个用户都可以检索“用户信息”表中的每个数据。

此代码仅允许用户检索自己的数据:

{
  "User Information" : {
    "47NiYA7rGNa8nJvlnnxzpxhqvCl2" : {
      "-LYuXT8d5Hzm4Sp_7buK" : {
        "deceasedName" : "You",
        "deceasedRelative" : "Are",
        "noLot" : "34",
        "relativeAddress" : "Main Road",
        "relativeContact" : "0231456789"
      }
    },
    "LV4y2BXnNWWkJix6YwTRJV8LdQs2" : {
      "-LYufF_KMO1o7EULIK8Y" : {
        "deceasedName" : "amir",
        "deceasedRelative" : "loqman",
        "noLot" : "104",
        "relativeAddress" : "aman",
        "relativeContact" : "123456"
      }
    }
  }
}

我使用以下Firebase规则:

 databaseReference = FirebaseDatabase.getInstance().getReference("User Information");
    FirebaseUser user = firebaseAuth.getCurrentUser();
    String UserID = user.getUid();
    databaseReference.child(UserID).addListenerForSingleValueEvent(new ValueEventListener() { {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot INFOSnapshot : dataSnapshot.getChildren()){
                UserInformation  userInfo = INFOSnapshot.getValue(UserInformation.class);
                infoList.add(userInfo);
            }
            UserInfoAdapter userInfoAdapter = new UserInfoAdapter(InfoDisplayActivity.this, infoList);
            listViewINFO.setAdapter(userInfoAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

那么我需要更改firebase规则或更改编码吗?

1 个答案:

答案 0 :(得分:0)

对于写作部分,我建议您将规则更改为此:

{
  "rules": {
    ".write": "auth != null",
    "User Information": {
      "$user_id": {
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

使用此写规则,每个用户只能写自己的用户信息,但仍然能够读取数据库中的所有内容。有关用户安全性的更多信息,建议您阅读the Firebase documentation

对于读取所有用户信息,您只需要像这样删除代码中的.child(UserID)部分:

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() { {
相关问题