Let user choose public roles (and keep other roles private) at registration

the user should be able to choose a role from a dropdown menu.
and it would help if i could control which role he could access