0

我有一個firebase數據庫,用戶可以在其中提交posts。如果帖子是私人提交的,其他用戶無法閱讀。列出所有包含firebase規則的項目

看到數據庫和規則如下:

// FIREBASE DATABASE: 
{ 
    "posts" : { 
    "-PaNtmNIFp9sTT549-Kn" : { 
     "author" : "XXXYYY", 
     "content" : "New post", 
     "public" : true 
    }, 
    "-PaNw0ak27MfcU5Vff1t" : { 
     "author" : "XXXYYY", 
     "content" : "Secret post", 
     "public" : false 
    }, 
    "-PaOPhX3SwRe2ThEFWJo" : { 
     "author" : "XXXYYY", 
     "content" : "another post", 
     "public" : true 
    } 
    }, 
    "user-posts" : { 
    "XXXYYY" : { 
     "-PaNtmNIFp9sTT549-Kn" : true, 
     "-PaNw0ak27MfcU5Vff1t" : true, 
     "-PaOPhX3SwRe2ThEFWJo" : true 
    } 
    } 
} 

// RULES: 
{ 
    "rules": { 
    "posts": { 
     "$post": { 
     ".read": "auth !== null && data.child('public').val() === true || data.child('author').val() === auth.uid" 
     } 
    } 
    } 
} 

這工作得很好,但只有當我取回物品後郵寄:

// DOES NOT WORK 
firebase.database().ref().child('posts').on('value', snap => { 
    console.log(snap.val()) 
}); 

// DOES WORK 
var children = ["-PaNtmNIFp9sTT549-Kn", "-PaNw0ak27MfcU5Vff1t", "-PaOPhX3SwRe2ThEFWJo"]; 
children.forEach(function(child) { 
    rootRef.child(child).on('value', snap => { 
    console.log(snap.val()) 
    }) 
}) 

我想這Rules are not Filters,對不對?然後我的問題變成:

  • 我該如何提示用戶使用正確的實體來尋找?我應該使用所有公共帖子密鑰創建單獨的節點,即名爲publicPosts
  • 如果我仍然希望能夠按照他們的內容對公共帖子進行排序,我該如何去做這件事?只需在新節點publicPosts中複製可能與查詢相關的所有數據?

謝謝!

回答

1

與公共職位的關鍵清單確實是一種選擇。其他選項是使用完整的公共帖子創建單獨的頂級節點。

事實上:爲了能夠對數據進行排序,該數據必須對用戶可讀。如果您只是想通過時間戳來訂購它們,則可以將該時間戳記作爲值(而不是您現在的true)。但是對於更復雜的查詢,您需要複製更多數據。在某個時候,你會喜歡複製整篇文章。

相關問題