RBAC assigns permissions to roles, then roles to users:
User → Role → Permissions
john → admin → [read, write, delete]
jane → viewer → [read]
Design principles:
- Least privilege: Start with minimal permissions
- Role hierarchy: Admin inherits Editor inherits Viewer
- Separation of duties: No single role can complete sensitive actions alone
Database schema:
- users, roles, permissions tables
- user_roles, role_permissions junction tables
RBAC works well for stable permission structures. Becomes complex with many roles or fine-grained rules.