【发布时间】:2019-07-10 22:54:05
【问题描述】:
如果我希望只有身份验证用户可以将数据写入 firebase,然后身份验证用户可以从其他身份验证用户读取数据,我应该使用什么规则。例如用户A向数据库写入数据,我希望用户B也可以从用户A读取数据。
例如 JSON:
{
"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"
}
}
}
}
对于“用户信息”表,有 2 个身份验证用户,即 Uid = "47NiYA7rGNa8nJvlnnxzpxhqvCl2" 和 Uid = "LV4y2BXnNWWkJix6YwTRJV8LdQs2"。所以我希望每个用户都可以检索“用户信息”表中的所有数据。
此代码只允许用户检索自己的数据:
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 规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
那么我需要更改 firebase 规则或更改编码吗?
【问题讨论】:
-
您还在问题中包含了 JSON 树的图片。请将其替换为实际的 JSON 作为文本,您可以通过单击 your Firebase Database console 的溢出菜单 (⠇) 中的 Export JSON 链接轻松获得。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
标签: firebase firebase-realtime-database firebase-security