Adding new user roles can either be done via some code in your functions.php or you simply use a plugin. In my case my client wanted to be able to customize the user role without having to code something, so I used the plugin PublishPress Capabilities.
This Plugin let’s you easily add one ore more user roles and of course give them the required capabilities. You can even set capabilities of custom post types and custom taxonomies:
If you now want to have a custom registration, login or even a profile page for your new user roles, you can use the plugin User Registration.
This plugin is very easy to set up. Besides the user information fields, which come with WordPress by default, you can even add your own fields. In the free version of the plugin you’ll already have probably all field types you need for most of your projects.
Of course there are a lot alternatives for both of the plugins and I even tried out many of them, but these two are the best and easiest to set up in my opinion.