2015-10-23 4 views
2

Donc, je configure les règles de sécurité Firebase pour mon projet et pour que l'utilisateur ait un accès en lecture à une pièce, nous devons nous assurer qu'elles font partie de cette organisation. J'ai donc une règle de sécurité comme celui-ci:Variables temporaires dans les règles de sécurité Firebase

root.child('organizations').child(data.child('organization_id').val()).child('user_ids').hasChild(auth.uid)

ce vraiment laid, il Non seulement plusieurs autres règles dans la même instruction (séparés par & &/||) qui ont commencer par root.child('organizations').child(data.child('organization_id').val()) d'accès les données de la variable d'organisation associée à cette pièce.

Cela conduit à certaines règles de sécurité UGLY, est-il possible de faire des variables temporaires ou quelque chose comme ça afin que je puisse rendre cela beaucoup plus lisible? Je vous remercie!

Répondre

3

Non. Le langage de règles Firebase Security ne prend pas en charge les variables personnalisées. Cela conduit en effet à beaucoup de duplication entre les règles. La meilleure solution consiste à écrire vos règles dans un langage de niveau supérieur, compilant les règles de sécurité Firebase. Les plus connus sont Blaze (le grand-père de tous), Butane (pas de Firebase lui-même) et Bolt (nouveau et sous développement très actif).

Boulon par exemple vous permet de définir (global) functions, qui peut facilement encapsuler l'extrait répété et bien plus encore.

+0

Ceci est exactement le genre de chose que je cherchais, merci! – user1032369

+0

Bolt est le plus susceptible d'être adopté comme l'approche recommandée à l'avenir. Commencez là. – Kato

1

Dans Bolt, vous pouvez écrire votre règle comme ceci:

type Room { 
    organization_id: String, 

    read() { isUserInOrg(this.organization_id) } 
} 

isUserInOrg(org_id) { root.organizations[org_id].user_ids[auth.uid] }