Using Comparison Operators in Firebase Security Rules
📖 Scenario: You are managing a Firebase Firestore database for a simple blog app. You want to control who can read and write posts based on certain conditions.
🎯 Goal: Write Firebase security rules that use comparison operators ==, <, >, >=, and <= to allow or deny access to posts.
📋 What You'll Learn
Create a rule that allows reading posts only if the post's status is exactly "published".
Add a rule that allows writing a post only if the likes count is less than 100.
Add a rule that allows updating a post only if the views count is greater than or equal to 10.
Add a rule that denies deleting a post if the comments count is greater than 0.
Add a rule that allows reading posts only if the createdAt timestamp is less than or equal to the current time.
💡 Why This Matters
🌍 Real World
Firebase security rules protect your database by controlling who can read or write data based on conditions.
💼 Career
Understanding and writing secure Firebase rules is essential for backend and cloud developers working with Firebase.
Progress0 / 4 steps
1
Create the base Firestore rules structure
Write the initial Firestore rules with a match block for posts/{postId} and allow read only if resource.data.status == "published".
Firebase
Hint
Use resource.data.status == "published" to check the post status.
2
Add write rule with likes count check
Add an allow write rule inside match /posts/{postId} that permits writing only if request.resource.data.likes < 100.
Firebase
Hint
Use request.resource.data.likes < 100 to limit writes.
3
Add update rule with views count check
Add an allow update rule inside match /posts/{postId} that permits updates only if request.resource.data.views >= 10.
Firebase
Hint
Use request.resource.data.views >= 10 to allow updates.
4
Add delete and read rules with comments and createdAt checks
Add an allow delete rule that denies deletion if resource.data.comments > 0. Also, update the allow read rule to allow reading only if resource.data.createdAt <= request.time and resource.data.status == "published".
Firebase
Hint
Use !(resource.data.comments > 0) to deny deletes if comments exist. Use resource.data.createdAt <= request.time to check creation time.
Practice
(1/5)
1. Which comparison operator in Firebase queries checks if a field value is exactly equal to a given value?
easy
A. ==
B. <
C. >=
D. <=
Solution
Step 1: Understand the purpose of each operator
The operator == checks for exact equality, while <, >=, and <= check for less than, greater or equal, and less or equal respectively.
Step 2: Identify the operator for exact equality
Since the question asks for exact equality, the correct operator is ==.
Final Answer:
== -> Option A
Quick Check:
Exact equality operator = == [OK]
Hint: Use == to check if values are exactly the same [OK]
Common Mistakes:
Confusing == with assignment operator =
Using < or > for equality checks
Thinking >= means equal only
2. Which of the following is the correct Firebase query syntax to find documents where the field age is greater than 18?
easy
A. query.where('age', '==', 18)
B. query.where('age', '<', 18)
C. query.where('age', '>=', 18)
D. query.where('age', '>', 18)
Solution
Step 1: Identify the operator for 'greater than'
The operator for 'greater than' is >.
Step 2: Match the operator with the correct syntax
The correct syntax uses query.where('age', '>', 18) to filter documents where age is greater than 18.
Final Answer:
query.where('age', '>', 18) -> Option D
Quick Check:
Greater than operator = > [OK]
Hint: Use '>' for values strictly greater than target [OK]
Common Mistakes:
Using '==' instead of '>'
Confusing '>=' with '>'
Using '<' when wanting greater values
3. Given this Firebase query: query.where('score', '>=', 50).where('score', '<', 70), which scores will be included in the results?
medium
A. Scores greater than or equal to 50 and less than 70
B. Scores greater than 50 and less than or equal to 70
C. Scores equal to 50 or equal to 70
D. Scores equal to 50 and less than 70
Solution
Step 1: Analyze the first condition
The first condition score >= 50 includes scores 50 and above.
Step 2: Analyze the second condition
The second condition score < 70 includes scores less than 70, excluding 70 itself.
Step 3: Combine both conditions
Only scores that satisfy both conditions are included: scores greater than or equal to 50 and less than 70.
Final Answer:
Scores greater than or equal to 50 and less than 70 -> Option A
Quick Check:
Range includes 50 ≤ score < 70 [OK]
Hint: Combine >= and < for range queries [OK]
Common Mistakes:
Including 70 when using '<' operator
Confusing '>' with '>='
Thinking 'or' instead of 'and' between conditions
4. You wrote this Firebase query: query.where('price', '=>', 100). Why does it cause an error?
medium
A. Because 'price' field cannot be compared
B. Because 100 should be a string, not a number
C. Because '=>' is not a valid comparison operator in Firebase queries
D. Because the operator should be '<=' instead
Solution
Step 1: Check the operator syntax
The operator '=>' is not a valid Firebase comparison operator. The correct operator for 'greater than or equal' is '>='.
Step 2: Understand Firebase operator rules
Firebase only supports specific operators: ==, <, >, <=, and >=. Using any other operator causes a syntax error.
Final Answer:
'=>' is invalid operator causing error -> Option C
Quick Check:
Use >=, not => for greater or equal [OK]
Hint: Use >=, not => for greater or equal [OK]
Common Mistakes:
Typing => instead of >=
Using strings instead of numbers for numeric fields
Assuming all operators are valid
5. You want to query Firebase documents where the field temperature is between 20 and 30 inclusive. Which query correctly uses comparison operators to achieve this?
hard
A. query.where('temperature', '>', 20).where('temperature', '<', 30)
B. query.where('temperature', '>=', 20).where('temperature', '<=', 30)
C. query.where('temperature', '==', 20).where('temperature', '==', 30)
D. query.where('temperature', '<=', 20).where('temperature', '>=', 30)
Solution
Step 1: Understand inclusive range requirements
Inclusive means including both 20 and 30 values.
Step 2: Choose operators that include boundary values
>= includes 20 and <= includes 30, so these operators match the requirement.
Step 3: Verify the combined query
The query query.where('temperature', '>=', 20).where('temperature', '<=', 30) correctly filters temperatures from 20 to 30 inclusive.
Final Answer:
query.where('temperature', '>=', 20).where('temperature', '<=', 30) -> Option B
Quick Check:
Inclusive range uses >= and <= [OK]
Hint: Use >= and <= for inclusive ranges [OK]
Common Mistakes:
Using > and < excludes boundary values
Using == twice filters only exact matches
Reversing operators causing empty results
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.