Java 如何从firebase中的所有用户检索特定的子数据
我正在创建一个博客应用程序,用户可以在使用其帐户登录后发布。我的问题是,我希望能够显示所有用户的所有博客。在所有用户及其Uid下都有一个名为Blog的子项,我想将其显示在仪表板上,因此当用户使用其帐户登录时,他们可以看到其他用户的Blog。我希望问题很清楚,有人能帮我吗。多谢各位 这是我的代码,但这给了我错误权限被拒绝Java 如何从firebase中的所有用户检索特定的子数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在创建一个博客应用程序,用户可以在使用其帐户登录后发布。我的问题是,我希望能够显示所有用户的所有博客。在所有用户及其Uid下都有一个名为Blog的子项,我想将其显示在仪表板上,因此当用户使用其帐户登录时,他们可以看到其他用户的Blog。我希望问题很清楚,有人能帮我吗。多谢各位 这是我的代码,但这给了我错误权限被拒绝 private void loadPost() { DatabaseReference ref = FirebaseDatabase.getInstan
private void loadPost() {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users").child("Blog");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
postList.clear();
for (DataSnapshot ds: dataSnapshot.getChildren()){
ModelPost modelPost = ds.getValue(ModelPost.class);
postList.add(modelPost);
adapterPost = new AdapterPost(getActivity(), postList);
recyclerView.setAdapter(adapterPost);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getActivity(), ""+databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
这是我的数据库
这是我的数据库安全规则
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
您的代码尝试从此
getReference(“users”).child(“Blog”)
读取,这有两个问题:
/users/Blog
中没有数据/users/Blog
的权限String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users").child(uid).child("Blog")
注意,这不允许用户阅读所有用户的所有博客文章。事实上,在您当前的模型中,如果不授予他们读取所有用户配置文件的权限,这是不可能的,我认为这不是您想要的 如果您希望允许用户阅读所有博客文章,但只允许他们访问自己的配置文件,则需要创建两个独立的顶级节点:
profiles: {
uid1: {
}
uid2: {
}
}
blogs: {
uid1: {
blogid1: { ... }
blogid2: { ... }
}
uid2: {
blogid3: { ... }
blogid4: { ... }
}
}
或者,您可以将最后一个结构中的博客建模为:
blogs: {
blogid1: { uid: "uid1". ... }
blogid2: { uid: "uid1". ... }
blogid3: { uid: "uid2". ... }
blogid4: { uid: "uid2". ... }
}
在任何一种情况下,您现在都可以通过以下方式允许访问:
"rules": {
"profiles": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"blogs": {
".read": true"
}
}
还请添加错误堆栈跟踪。要允许用户写入
“/blogs”
,并能够编辑/删除他们自己的博客文章,您还需要”.write:“(!newData.exists()|| newData.child('uid').val()==auth.uid)和(!data.exists()| data.child('uid').val()==auth.uid)”
。这是否意味着我必须更改数据库结构