Process Flow - Common rule patterns
Start Request
Match Request Path
Check Rule Conditions
Allow
End Request
A request comes in, matches a path, checks conditions, then allows or denies access.
match /documents/{docId} {
allow read: if request.auth != null;
allow write: if request.auth.uid == resource.data.owner;
}| Step | Request Path | Condition Checked | Condition Result | Access Decision |
|---|---|---|---|---|
| 1 | /documents/abc123 | request.auth != null | true | Allow read |
| 2 | /documents/abc123 | request.auth.uid == resource.data.owner | false | Deny write |
| 3 | /documents/abc123 | request.auth != null | false | Deny read |
| 4 | /documents/abc123 | request.auth.uid == resource.data.owner | true | Allow write |
| Variable | Start | After Step 1 | After Step 2 | After Step 3 | After Step 4 |
|---|---|---|---|---|---|
| request.auth | null or object | object (logged in) | object (logged in) | null | object (logged in) |
| request.auth.uid | undefined | user123 | user123 | undefined | user123 |
| resource.data.owner | user123 | user123 | user456 | user123 | user123 |
Firebase rules check requests by matching paths and conditions. Use 'allow' with conditions like 'request.auth != null' to control access. Read and write can have different conditions. If no rule matches or condition fails, access is denied. Rules protect data by verifying user identity and ownership.