如何允許從組中讀取特定專案但阻止列出組成員

通常的做法是通過建立專案 ID 為鍵的簡單值節點來建立專案組。例如,我們可以通過在 /administrators/$user_id 建立一個值為 true 的節點,將使用者新增到管理員組。出於安全原因,我們不希望任何人知道管理員是誰,但我們仍然想檢查 Authenticated 使用者是否是管理員。有了這些規則,我們可以這樣做:

{
  "rules": {
    "administrators": {
      // No one can list administrators
      ".read": "false",
      "$uid": {
        // Authenticated user can check if they are in this group
        ".read": "$uid === auth.uid",
        // Administrators can write
        ".write": "data.parent().child(auth.uid).val() === true",
        // Allow only add or delete, no duplicates
        ".validate": "!data.exists() || !newData.exists() || newData.isBoolean()",
      }
    }
  }
}