setting rules for a specific attribute in Firebase Realtime database

Viewed 45

EDIT: this will also not work if I will set ".read": "true" in any child or any sub-tree including the rules root (this is not showing here in the examples).

In my app, which manage user's wedding details such as guests, I want to let the guests write to the "arrive" field only if the "invited" field is exists (actually if it will be true , but I checked if it exists just for testing). However, I didn't manage to do this since in the Firebase console it's says that the simulated set is denied :

simulated set denied

The rules in the Firebase console:

{
 
  "rules": {
    "Users": {
      "$uid":{
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      },
      ".indexOn": "email"    
    },
    "Guests":{
      "$uid":{
        "$guest_id":{
          "arrive":{
            ".read": "$uid === auth.uid",
            ".write": "root.child('Guests/'+ $uid + '/' + $guest_id +'/invited').exists()"
          }
        }
          
      }
    }
    
  }
  
}

The JSON example I wrote in the Rules Playground in the console:

{
  "Guests": {
    "user_1": {
      "guest_1": {
        "arrive": false,
        "invited": true
      }
    }
  }
}

The location path in the Rules Playground:

/Guests/user_1/guest_1/arrive

I tried several approaches and they didn't work. For example:

".write": "data.parent().child('invited').exists()" 

or

".write": "root.child('Guests').child($uid).child($guest_id).child('invited').exists()"
0 Answers
Related