Muchos a muchos usando Firebase

Digamos que tengo dos tipos de objetos usuarios y cuentas. Los usuarios pueden tener muchas cuentas y compartirlas con otros usuarios. Así que AccountA podría estar disponible para User1 y User2. Mientras que AccountB solo está disponible para User1. Así que User1 tiene dos cuentas, y User2 tiene una cuenta.

¿Cuál es la forma "cortafuegos" de estructurar esto?

Inicialmente pensaba que los usuarios podían almacenar una serie de cuentas a las que pertenecen.

users: {
  1: {
    name: 'Ted',
    accounts: [1, 2]
  }
  2: {
    name: 'Frank',
    accounts: [1]
  }
}

accounts: {
  1: {
    name: "Checking"
  },
  2: {
    name: "Savings"
  }
}

O la cuenta tendría una matriz de usuarios.

users: {
  1: {
    name: 'Ted'
  }
  2: {
    name: 'Frank'
  }
}

accounts: {
  1: {
    name: "Checking",
    users: [1, 2]
  },
  2: {
    name: "Savings"
    users: [1]
  }
}

Me pregunto qué camino se presta para que pueda encontrar fácilmente las cuentas de un usuario, de modo que cuando Ted inicie sesión, pueda hacer una lista de las cuentas a las que pertenece sin tener que bajar toda la base de datos. Por seguridad, no quiero todos esos datos en su máquina de todos modos.

Pregunta # 1 ¿Se encargarían de esto las reglas de seguridad? Con eso quiero decir que estoy planeando establecer mi regla de seguridad de modo que los usuarios solo puedan acceder a las cuentas a las que pertenecen. Espero que si pregunto por "/ accounts" solo recupere las cuentas a las que el usuario puede acceder ... ¿no?

Pregunta # 2 ¿Existe un mecanismo para consultar una lista de elementos? ¿Me gusta "/ accounts / [1,2]" para que recupere las cuentas "/ accounts / 1" y "/ accounts / 2"?

Gracias por cualquier información que pueda compartir.

Respuestas a la pregunta(1)

Su respuesta a la pregunta