firebaseのruleの記載においてchildの中にロケーション変数を使用したい


いつもお世話になっております。  
現在firebaseでチャットソフトを作成しているのですが、バックエンド側の処理で思ったようにいかずつまづいてしまいました。

データベース上のチャットルームに読み込み権限と書き込み権限を付けたのですが、ruleから参照する方法が分からず質問させて頂きました。

rule

[code]

     {
       
       "rules": {
         "rooms" : {
           ".read": "auth != null",
             ".write": "auth != null",
             "$room_id" :{
                        ".read": "root.child('rooms').child($room_id).child('read').val()=='true'",
                        ".write": "root.child('rooms').child($room_id).child('write').val()=='true'",
             }
         }
       }
     }
    
[/code]

データベース

[code]

             {
              
          "rooms" : {
            "-ROOM_ID_1" : {
              "admin" : false,
              "img_upload" : false,
              "messages" : {
                "-MB-NAtBV1ybNEUM-DVS" : {
                  "name" : "hoge.",
                  "text" : "テスト"
                }
              },
              "read" : true,
              "room_name" : "部屋1",
              "write" : true
            },
            "-ROOM_ID_2" : {
              "admin" : false,
              "img_upload" : false,
              "messages" : {
                "-MB-BcDIyABa7Ngw23IM" : {
                  "name" : "hoge",
                  "text" : "テスト"
                },
                "-MB-NPjk4xd0h_JZTUjG" : {
                  "name" : "hoge",
                  "text" : "テスト"
                }
              },
              "read" : true,
              "room_name" : "部屋2",
              "write" : true
         }
        }
     }
    
[/code]

ruleからデータベースのroom内のwriteを参照したいのですが、参照できず困っています。




自己解決しました。  
ちょっと改良したため、こんな感じになりました。

**データベース**

[code]

    {
      "admin-users" : {
        "9k3Uf---------------" : true
      },
      "black-list" : {
        "MAtSa-------------" : true
      },
      "rooms" : {
        "-MB3l-----------" : {
          "admin" : false,
          "author" : "",
          "img_upload" : false,
          "messages" : {
            "-MB3nu----------" : {
              "name" : "Haru Haru",
              "photoUrl" : "",
              "text" : "テスト"
            }
          },
          "photoUrl" : "",
          "read" : true,
          "room_name" : "部屋1",
          "write" : true
        },
        "-MB3m---------------" : {
          "admin" : false,
          "author" : "",
          "img_upload" : false,
          "photoUrl" : "",
          "read" : true,
          "room_name" : "部屋2",
          "write" : false
        }
      }
    }
    
[/code]

**ルール**

[code]

    {  
      "rules": {
        "admin-users" : {
          ".read": "auth != null && !root.child('black-list').child(auth.uid).exists()",
          ".write": "root.child('admin-users').child(auth.uid).exists()",
        },
        "black-list" : {
          ".read": "auth != null && !root.child('black-list').child(auth.uid).exists()",
          ".write": "root.child('admin-users').child(auth.uid).exists()",
        },
        "rooms" : {
          ".read": "root.child('admin-users').child(auth.uid).exists() || auth != null && !root.child('black-list').child(auth.uid).exists()",
            "$room_id" :{
                        ".read": "root.child('admin-users').child(auth.uid).exists() || auth != null && !root.child('black-list').child(auth.uid).exists() && data.child('read').val()==true",
                  ".write": "root.child('admin-users').child(auth.uid).exists() || auth != null && !root.child('black-list').child(auth.uid).exists() && data.child('write').val()==true"
            }
        }
      }
    }
    
[/code]

