I have a Firebase database that I want to only allow users who have access to that application to be able to read from and write to.
My data structure is like so:
{
  "applications": {
    "id_1": {
      "feature": {
        "a": true,
        "b": false
      },
      "users": {
        "user_id_1": true,
        "user_id_2": true
      }
    }
  }
}
As you can see, each application can have many users who have read/write access.
I only want users in the users object to be able to retrieve that application.
I have rules like so:
{
  "rules": {
    "applications": {
      ".read": "auth != null",
      ".write": "auth != null",
      "$appId": {
        ".write": "data.child('users').child(auth.uid).val() === true",
        ".read": "data.child('users').child(auth.uid).val() === true"
      }
    }
  }
}
".read": "auth != null", allows any user who is logged in to be able to retrieve all applications. I only want users user_id_1 or user_id_2 to be able to read that application.
In pseudo code, I would do something like this:
{
  "rules": {
    "applications": {
      ".read": "only users in `root.applications.$appId.users` can read", // I need to replace `$appId` some how
      ".write": "auth != null",
      "$appId": {
        ".write": "data.child('users').child(auth.uid).val() === true",
        ".read": "data.child('users').child(auth.uid).val() === true"
      }
    }
  }
}
How can I restrict it so when user user_id_1 fetches their applications, they only see apps they have access to?
 
     
    