Three layers
Object and field access come from profiles and permission sets. Record access comes from sharing: org-wide defaults, role hierarchy, sharing rules and manual sharing.
- Start with the most restrictive org-wide default, then open up.
- Prefer permission sets over many custom profiles.
- Field-level security hides a field everywhere, including reports and the API.