J'ai un firestore cloud. Dans ce magasin, j'ai une collection de tous les administrateurs. Toutes les données du magasin peuvent être lues par n'importe qui, mais les écritures doivent être limitées aux administrateurs. Si quelqu'un essaie d'écrire dans une collection, par exemple latest-news, je veux voir si l'utilisateur qui essaie d'écrire dans la collection est un administrateur. L'idée que je veux est quelque chose comme ceci:

 match /latest-news/{news-id} {
    allow read: if true;
    allow write: if <my-admin-collection>.map(auth => auth.uid).includes(request.auth.uid);
 }

Comment pourrais-je faire ça?

1
maeaec 30 août 2020 à 12:37

2 réponses

Meilleure réponse

Si votre collection d'administrateurs stocke ces administrateurs par leur UID, vous pouvez vérifier l'existence d'un tel document à partir de vos règles avec:

if exists(/databases/$(database)/documents/admins/$(request.auth.uid));

Ce qui précède autorise l'opération si un document avec l'UID de l'utilisateur actuel existe dans la collection /admins.

Consultez également la documentation sur le contrôle d'accès basé sur les attributs et les rôles .

0
Frank van Puffelen 30 août 2020 à 15:14

Tout dépend de la façon dont vous définissez les rôles. Dans Firebase, les rôles d'authentification peuvent être configurés à l'aide de Revendications personnalisées.

Les revendications personnalisées peuvent être utilisées pour rédiger des règles de sécurité telles que

match /latest-news/{news-id} {
   allow write: if request.auth.token.role == 'Admin';
}

La règle de sécurité ci-dessus permettra uniquement à l'utilisateur d'avoir le rôle d'administrateur pour écrire dans la collection.

0
Codex 30 août 2020 à 15:15