Does firestore rules validate every time when data receive?

51 Views Asked by At

Does firestore rules validate every time when data receive? Or only when the listener create?

Data structure

- users
  - user1
    isAllowToReadMessage: true

- messages
  - message1
    content: "Hello"
  - message2
    content: "How are you doing"

And rules

match /messages/{messageId} {
   allow list: get(/databases/$(database)/documents/users/$(request.auth.uid)).isAllowToReadMessage;
}

Let's say a user add a listener on /messages, But if isAllowToReadMessage changed to false after the listener added, Will user still receive newest message?

_profileRepository.collection("messages")
            .doc(_firebaseAuth.currentUser!.uid)
            .snapshots()
            .listen((snapshot) {});
1

There are 1 best solutions below

2
Renaud Tarnec On BEST ANSWER

Let's say a user adds a listener on /messages. But if isAllowToReadMessage changes to false after the listener is added, will the user still receive newest messages?

The answer is NO: The user will stop receiving messages if the Security Rules change in such a way they prevent him/her from reading the docs of the collection.


In addition note that there is an error in your security rule syntax. You should use the data property as follows:

match /messages/{messageId} {
   allow list: get(/databases/$(database)/documents/users/$(request.auth.uid)).data.isAllowToReadMessage;
}