

いつもお世話になっております。  
現在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を参照したいのですが、参照できず困っています。


CC BY-SA 4.0
2020-06-29T22:35:57.513
68121
2020-06-30T16:08:05.890
2020-06-30T16:08:05.890
3068
40868
question
firebase
firebaseのruleの記載においてchildの中にロケーション変数を使用したい


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

**データベース**

[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]


CC BY-SA 4.0
2020-06-30T10:41:54.607
68149
2020-06-30T11:43:50.377
2020-06-30T11:43:50.377
3060
40868
68121
answer