2017-10-06 6 views
0

Si je comprends bien [1], dans Firebase, il n'y a aucun moyen de restreindre l'accès des utilisateurs aux données qu'ils possèdent, ni un moyen de masquer les colonnes sensibles. Est-ce mieux dans le nouveau Firestore? At-il des solutions de contournement? Une solution que je pourrais envisager serait de router de telles demandes à travers une fonction Cloud afin de filtrer si nécessaire, au lieu de permettre un accès direct. Cela pourrait-il fonctionner?Firestore: restriction de l'accès enfant/champ avec des règles de sécurité

[1] Restricting child/field access with security rules

+1

Dans Firebase, vous pouvez restreindre l'action d'écriture et de lecture de l'utilisateur à partir de son uid ou de toute autre condition que vous souhaitez, telle qu'une valeur de chaîne dans son UID qui lui permettrait de voir un autre nœud. – Torewin

+1

Je pense, mais je ne l'ai pas encore essayé. Voir https://firebase.google.com/docs/firestore/security/secure-data#shallow_queries –

Répondre

2

Firestore (et Firebase) ne font pas vraiment les distinctions sur le "propriétaire" des données. Vous pouvez créer des règles pour implémenter des stratégies de propriété, mais il n'y a rien d'intrinsèque qui force cela à être le cas. Dans les règles Firestore, les règles Firestore s'appliquent à l'ensemble des documents. Vous ne pouvez donc pas masquer les colonnes sensibles. Une solution typique consiste à avoir des champs publics dans un document et des champs privés dans un second. Vous pouvez alors write rules to enforce different access to the separate documents. Lorsque vous écrivez plusieurs documents comme celui-ci, vous avez quelques options. Une façon est d'écrire l'intégralité de l'enregistrement dans une moitié privée et d'avoir un filtre de fonction qui écrit la partie publique. L'inconvénient de ceci est qu'il y a un délai entre le moment où vous écrivez la partie privée et quand vous pouvez voir la partie publique mise à jour.

Une autre approche consiste à utiliser des lots d'écriture pour écrire dans les deux documents de manière atomique. Contrairement aux transactions complètes, qui exigent que vous soyez en ligne, les lots d'écriture peuvent être utilisés hors ligne et sont appropriés lorsque vous devez effectuer une modification atomique de deux ou plusieurs documents, mais que vous ne prévoyez pas d'autres écritures. Un utilisateur mettant à jour son propre profil serait un bon exemple d'un cas où les lots d'écriture fonctionnent très bien.

+0

Le lien par @Torewin complète ce problème en répondant à la sous-question sur l'accès au niveau des documents individuels. Merci! – Tycho