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.
request.auth to check if a user is authenticated.request.auth != null meaning user is logged in.allow write: if request.auth.uid == resource.data.ownerId;
allow read: if request.auth.uid = resource.data.ownerId;
Pass the test and this pattern moves unknown