Esiste un approccio best practice per le regole di autorizzazione appropriate per il contenuto protetto in un'applicazione Firebaseregole di autorizzazione corretta per il contenuto protetto in Firebase
- utilizzando Firepad specificamente
- Con contenuti protetti intendo in cui un utente crea un documento e lo condivide solo con alcuni altri utenti).
- Inoltre ho bisogno di essere in grado di interrogare Firebase per tutti i documenti che ho accesso a (documenti che ho creato e Documenti altri utenti condiviso con me)
Alcune delle mie ricerche finora:
Metodo 1: segreto URL
ho bisogno di conoscere l'URL per essere in grado di visualizzare/modificare il documento
Autenticazione non reale, in quanto qualsiasi utente che ha accesso che ha accesso a tale URL può modificarlo/modificarlo.
indice Cant tutti i documenti ho accesso a
Metodo 2: Usando le regole di autorizzazione Firebase per aggiungere gli utenti a un documento e verificare se l'utente è document.users prima della lettura/scrittura.
Tratto da: Protected content in Firebase possible?
{
"documents": {
"$documents_id": {
// any friend can read my post
".read": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()",
// any friend can edit my post
".write": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()"
},
users:{
// List of user.ids that have access to this document
}
}
}
Pro:
- debita autorizzazione/autenticazione. Solo gli utenti autenticati a cui è stato concesso l'accesso possono visualizzare/modificare.
Contro:
- Impossibile ricercare tutti i documenti di un utente è autorizzato ad editare (quelli che possiedo o sono stati condivisi con me) (? È questa assunzione corretta)
Metodo 3: Regole di autorizzazione di Firebase (metodo 2), oltre a un archivio ridondante di utenti con una serie di ID del documento a cui ogni utente ha accesso. Questo archivio utenti verrebbe utilizzato solo per interrogare tutti i documenti a cui un utente ha accesso. vale a dire:
{
"documents": {
"$documents_id": {
// any friend can read my post
".read": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()",
// any friend can edit my post
".write": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()"
}
},
"users":{
"$user":{
".read": "auth.id=$user.id",
".write": "auth.id=$user.id"
"$documents":{
// All the documents i have access to. This list gets ammended whenever I am granted/stripped access to a document.
}
}
}
}
Pro:
- corretta autenticazione/autorizzazione
Contro: dati
- duplicati, hanno a che fare con i problemi di sincronizzazione tra due archivi di dati. Questo non sembra una buona idea.
Metodo 4: Gruppi
Uso gruppi per Granting access to Firebase locations to a group of users
Abbiamo un gruppo per ogni documento in archivio dati
Cant facilmente tua ricerca Firebase per tutti i documenti un utente può accedere a
C'è un modo migliore per farlo?
Grazie Michael per questo chiarimento. Bisognerà stare attenti a tenere sincronizzati i bit importanti da ognuno di essi. – abaker
Sì. Anche se in molti casi puoi facilmente rendere il tuo codice robusto contro le mancate corrispondenze. Ad esempio, se si dispone di un documento nell'elenco, ma si ottiene un errore di autorizzazione negato quando si tenta di leggere i relativi metadati, è sufficiente nasconderlo all'utente. In questo modo le regole di sicurezza sono la vera autorità, e il tuo elenco di documenti personali è solo un "suggerimento" su cosa dovresti avere accesso, e se diventa leggermente fuori sincrono, non importa. Certo, se riesci a garantire che rimangano sincronizzati, è meglio, ma non è sempre necessario al 100%. :-) –