J'ai une application conçue pour que les utilisateurs authentifiés via Google n'aient accès qu'à leurs propres données sans fonctionnalités "sociales". Je souhaite connaître les règles de sécurité pour les critères ci-dessous.
Disons que j'ai 5 collections et que l'une d'elles s'appelle "todos" et que les données reflètent les autres collections en ce sens qu'elle a un champ pour l'uid des utilisateurs authentifiés. Le document typique ressemble à ceci:
Todos
todo:{
title:"some titled",
body:"we are the world , we are the children",
uid:"2378y4c2378rdt2387btyc23r7y"
}
Une autre collection
thing:{
name:"some name",
content:"Some content",
whatever:"whu-eva",
uid:"2378y4c2378rdt2387btyc23r7y"
}
Je veux que l'utilisateur Google authentifié puisse CRUD toutes les données qui ont indiqué l'utilisateur uid dans le champ uid. Je souhaite que toutes les autres données soient inaccessibles à l'utilisateur connecté.
Je veux savoir comment créer des règles pour ce scénario.
Je suis en train de parcourir la documentation maintenant, mais je pense que je pourrais peut-être gagner du temps en demandant. Je n'ai pas de rôles spécifiques pour l'application. https://firebase.google.com/docs/firestore/solutions/role-based-access
En remarque, est-ce qu'une fonctionnalité de Firebase permet de lier automatiquement un utilisateur authentifié de Google à des documents créés alors qu'ils sont connectés? (Je suppose que la réponse est non et je prévoyais de saisir manuellement l'uid dans mon application et de le configurer sur le client avant la création du document).
Je vous remercie.
Mettre à jour
J'ai essayé d'utiliser le code que Klugjo a publié ci-dessous.
Lorsque j'essaye de le tester dans le simulateur, j'obtiens une erreur.
Voici ma collection et une capture d'écran de l'erreur.
Voici autre chose que j'ai essayé:
D'après tout ce que j'ai lu, il semble que le code suivant devrait fonctionner - mais ce n'est pas le cas. J'ai complété la clé "userId" à la place de "uid" qui est écrit dans les données d'objet en haut de cet article. J'ai changé la clé pour la distinguer de l'uid.
service cloud.firestore {
match /databases/{database}/documents {
match /todos/{id} {
allow read: if request.auth.uid == request.resource.data.userId;
allow create, update, delete:
if request.resource.data.userId == request.auth.uid;
}
}
}
J'ai créé une vidéo dans laquelle j'essaye d'obtenir et de CRÉER un document. Je ne pense pas que j'utilise correctement la fonction de test.
Vidéo
https://www.youtube.com/watch?v=W7GZNxmBCBo&feature=youtu.be
[~ # ~] modifier [~ # ~]
Je le fais fonctionner lorsque je teste avec un request.auth.uid
. Dans l'image ci-dessous, j'ai codé en dur "test" comme request.auth.uid
.
Mon problème maintenant est que j'aimerais vraiment savoir comment le tester dans l'éditeur de règles sans coder en dur ces informations.
Modifier
Voici une démonstration vidéo du problème en utilisant une vraie application.
https://www.youtube.com/watch?v=J8qctcpKd4Y&feature=youtu.be
Vous cherchez quelque chose comme ça
service.cloud.firestore {
match /databases/{database}/documents {
match /todos/{userId} {
allow read, update, delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
match /todos/{userId}
rend la variable userId
disponible dans la condition de règle
request.auth.uid
correspond à l'utilisateur authentifié uid