Ho un elenco di record in firebase che avrà una proprietà di gruppo con zero o più gruppi su di esso. Ho anche l'oggetto auth firebase che avrà anche zero o più gruppi su di esso. Vorrei impostare una regola di Firebase per i miei record che verificherà se i due hanno in affitto un gruppo che esiste in entrambi gli elenchi.Come utilizzare la regola di Firebase per controllare è array di gruppi di utenti e array di gruppi di record intersecano
In un altro modo ho un utente che ha una matrice di gruppi che sono stati assegnati ad esso. Ho alcuni record che contengono anche alcuni elenchi di gruppi che specificano quali gruppi l'utente deve avere per accedervi. Se l'utente che ha effettuato l'accesso tenta di accedere al record, voglio assicurarmi che l'utente abbia almeno un gruppo richiesto dal record.
Sul client vorrei fare qualcosa di simile _.intersect(userGroups, recordGroups).length > 0
io non sono sicuro di come avrei fatto questo in un espressione regola Firebase. Sarebbe bello se funzionasse qualcosa del genere.
Record:
{
someData: "test"
groups: ['foo', 'bar']
}
Firebase Auth Oggetto:
{
userName: "Bob",
groups: ['foo', 'bar']
}
Regola dati:
{
"rules": {
"records": {
"$recordId": {
".read": "data.child('groups').intersectsWith(auth.groups)"
}
}
}
}
Grazie.
Aggiornamento: Penso che se hasChildren() utilizzata || invece di & & potrei mettere i nomi dei gruppi nella loro posizione chiave e controllare la loro esistenza in questo modo. Qualcosa di simile "data.child('groups').hasChildren(auth.groups, 'or')"
Dove Record:
{
someData: "test"
groups: {
'foo': '',
'bar': ''
}
}
Update2: base al largo il commento di Kato & collegamento mi rendo conto che, anche se hasChildren potesse fare o che ancora non avrebbe funzionato perfettamente ragione. Le richieste per i singoli record funzionerebbero ma le richieste per tutti i record sarebbero errate se l'utente corrente non avesse accesso ad ogni record.
Non è ancora chiaro come strutturare i dati per far funzionare questo. Se un record potesse appartenere a molti gruppi, come funzionerebbe? Questo è uno scenario molto comune (fondamentalmente come funzionano le autorizzazioni del gruppo linux) quindi non posso essere l'unico a provare a farlo. Qualcuno ha idee/esempi su come ottenere questo risultato in Firebase?
regole di sicurezza Firebase [non possono essere utilizzati come filtri] (https://www.firebase.com/docs/security/guide/securing-data.html # sezione-filtro). Probabilmente vorrai memorizzare i tuoi record per gruppo se è così che devono essere recuperati. – Kato
Non so come funzionerebbe. Gli utenti appartengono a molti gruppi e i record appartengono a molti gruppi. Fintanto che entrambi hanno un gruppo in comune, l'accesso dovrebbe essere fornito. – yodaisgreen
Qualche aggiornamento a questo? Ho un problema simile [qui] (http://stackoverflow.com/questions/34078703/proper-firebase-security-rules-for-implementing-rbac) –