簡體   English   中英

如何從 firebase 中的所有用戶中檢索特定的子數據

[英]How to retrieve a specific child data from all the users in firebase

我正在創建一個博客應用程序,用戶可以在使用他們的帳戶登錄后發布。 我的問題是我希望能夠顯示所有用戶的所有博客。 在所有用戶的 Uid 下都有一個名為 Blog 的子項,我想將其顯示在我的儀表板上,因此當用戶使用他們的帳戶登錄時,他們能夠看到其他用戶的博客。 我希望問題很清楚。任何人都可以幫助我。 謝謝你。

這是我的代碼,但這給了我錯誤權限被拒絕,

 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")讀取,這有兩個問題:

  1. 路徑/users/Blog中沒有數據。
  2. 沒有人有權閱讀/users/Blog

您的規則允許用戶閱讀他們自己的節點,包括博客文章和個人資料信息。 要閱讀用戶自己的博客文章,您會聽到:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users").child(uid).child("Blog")

請注意,這不允許用戶閱讀所有用戶的所有博客文章。 事實上,在您當前的 model 中,如果不授予他們讀取所有用戶配置文件的權限,這是不可能的,我認為這不是您想要的。

如果您想允許用戶閱讀所有博客文章,但只允許他們訪問自己的個人資料,則需要創建兩個單獨的頂級節點:

profiles: {
  uid1: {
  }
  uid2: {
  }
}
blogs: {
  uid1: {
    blogid1: { ... }
    blogid2: { ... }
  }
  uid2: {
    blogid3: { ... }
    blogid4: { ... }
  }
}

或者,您可以 model 最后一個結構中的博客為:

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"
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM