Turn `validate_role()` into a more helpful method and apply it in more places

I've accidentally assigned an incorrect role to a user too many times.