Non c'è alcun supporto esplicito per "gruppi" in Firebase, perché si può rappresentare da soli abbastanza facilmente. Qui ci sono due opzioni, a seconda della situazione.
Memorizzazione di informazioni sul gruppo in firebase.
I seguenti dati potrebbero essere utilizzati per rappresentare 2 gruppi ('alpha' e 'beta') e 3 pezzi di dati protetti ('thing1', 'cosa2', e 'Thing3')
{
"groups": {
"alpha": {
"joe": true,
"sally": true
},
"beta": {
"joe": true,
"fred": true
}
},
"data": {
"thing1": {
"group": "alpha"
/* data accessible only by the "alpha" group */
},
"thing2": {
"group": "beta"
/* data accessible only by the "beta" group */
},
"thing3": {
"group": "alpha"
/* more data accessible by the "alpha" group */
}
}
}
poi possiamo usare le seguenti regole per far rispettare la sicurezza:
{
"rules": {
"data": {
"$thing": {
".read": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)",
".write": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)"
}
}
}
}
allora se sto autenticato con {id: 'sally'} come il mio oggetto auth, dovrò accesso al thing1 e Thing3, ma non cosa2.
Memorizzazione di informazioni sul gruppo nel token di autenticazione.
Se si stanno generando token di autorizzazione e si conoscono i gruppi in cui un utente si trova al momento dell'autorizzazione, è possibile memorizzare l'elenco di gruppi nel token di autenticazione generato. Ad esempio, quando generi il token di autenticazione per l'utente "fred", includi "{id: 'fred', gruppi: {alpha: true, beta: true}}"
E quindi puoi applicare l'appartenenza al gruppo con:
{
"rules": {
"data": {
"$thing": {
".read": "auth[data.child('group').val()] != null",
".write": "auth[data.child('group').val()] != null"
}
}
}
}
Michael, grazie per la rapida risposta, la prima opzione era ciò che stavamo cercando. – user1452215
Che dire se si desidera concedere l'accesso ai dati. $ Cosa per più gruppi (invece di uno solo)? C'è qualcosa come .hasAnyChild() o simile? – Pl4yeR
Dove va esattamente il primo oggetto JSON? Questo definisce gruppi, alfa, beta ecc.? Non penso che tu possa metterlo nell'effettivo oggetto di sicurezza delle regole ... a meno che mi manchi qualcosa? – Matt