Why storing a role on the user profile is a mistake
If the role lives on the same record the user can edit, escalation is a field update. Keeping roles in a dedicated table, written only through controlled paths, means changing your own privilege level is a separate, auditable operation rather than a side effect of editing your name.
Two questions, two shapes of answer
- Module access: what depth does this role get in this area — full, read, limited or none.
- Action permission: is this specific operation allowed for this role at all.
- Action conditions: does the operation additionally require confirmation or a second person's approval.
Least privilege in practice
Least privilege is not a philosophy, it is a default. New capabilities start denied and are granted deliberately to the smallest role that needs them. The opposite default — grant broadly, restrict later — never converges, because nobody removes access from a working system.