Process Flow - Role-based access control pattern
User tries to access resource
Check user's role
Role allowed?
Grant access
Access result
User requests access, system checks their role, then grants or denies access based on allowed roles.
match /documents/{docId} {
allow read: if request.auth.token.role == 'admin';
allow write: if request.auth.token.role == 'editor';
}| Step | User Role | Requested Action | Condition Checked | Access Result |
|---|---|---|---|---|
| 1 | admin | read | role == 'admin' | Access granted |
| 2 | admin | write | role == 'editor' | Access denied |
| 3 | editor | read | role == 'admin' | Access denied |
| 4 | editor | write | role == 'editor' | Access granted |
| 5 | viewer | read | role == 'admin' | Access denied |
| 6 | viewer | write | role == 'editor' | Access denied |
| Variable | Start | After Step 1 | After Step 2 | After Step 3 | After Step 4 | After Step 5 | After Step 6 |
|---|---|---|---|---|---|---|---|
| request.auth.token.role | undefined | admin | admin | editor | editor | viewer | viewer |
| requested_action | undefined | read | write | read | write | read | write |
| access_granted | false | true | false | false | true | false | false |
Role-based access control (RBAC) uses user roles to allow or deny access. In Firebase, rules check request.auth.token.role. Access is granted only if the user's role matches the required role. Separate rules can control read and write permissions. If role is missing or mismatched, access is denied.