2

Je semble avoir du mal avec les règles de sécurité Firebase. J'ai lu les guides, mais les résultats du simulateur ne sont pas assez descriptifs (ce serait beaucoup plus facile si nous pouvions juste survoler un nœud, et un bouton apparaît où nous pouvons mettre à jour les règles).Règles de sécurité Firebase?

Voici ce que ma structure ressemble à:

chats 
    - randomChatId01 
    - name: "awesome chat" 
    - members: 
     - userId01 : true 
     - userId02 : true 
    - randomChatId02 
    - members: 
     - userId02 : true 
    - randomChatId03 
    - members: 
     - userId01 : true 
     - userId02 : true 
    - ... 

Je veux seulement qu'un utilisateur soit capable de lire les noeuds de chat dans lequel le nœud enfant du nœud membres contient l'utilisateur du authentifié auth.uid.

Donc, dans ce cas, si userId01 était connecté, elle aurait seulement un accès en lecture à randomChatId01 et randomChatId03.

C'est la règle que j'ai:

{ 
    "rules": { 

     "chats": { 

      "$chat": { 
      ".read": "data.child('members').val().contains(auth.uid)" 
      } 
     } 
    } 
} 

Cependant, il est de retour ce qui suit dans le simulateur:

Attempt to read /chats with auth={"provider":"anonymous","uid":"eF4ztDEXz7"} 
    /
    /chats 

No .read rule allowed the operation. 
Read was denied. 

Répondre

5

C'est parce que les règles Firebase de sécurité sont évaluées à l'endroit que vous lisez.

Vous essayez de lire /chats. L'utilisateur n'a pas l'autorisation de lecture sur /chats, les opérations échouent donc immédiatement.

Si vous lisez /chats/randomChatId01 comme userId01, il réussira. Ceci est traité dans la section documentation rules are not filters. Voir aussi la réponse de Michael Lehenbauer ici: Restricting child/field access with security rules