I would say create additional roles and if the role is based on a specific data point that you can verify automatically then you can use the model lifecycles to modify the user but I would strongly suggest against modifying the code to allow the user to pick their role.