2013-01-23 9 views

risposta

31

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" 
     } 
    } 
    } 
} 
+0

Michael, grazie per la rapida risposta, la prima opzione era ciò che stavamo cercando. – user1452215

+1

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

+0

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

Problemi correlati