Как реализовывать «разные версии одного кода»?
Да что тут можно придумать? Создаешь один общий класс для всех трёх типов пользователей, затем делаешь 3 класса наследника, расширяющих общий для всех класс. Ну и таким образом в зависимости от того, какой тип пользователя зашёл на сайт, делаешь инстанс соответствующего класса и работаешь с его методами.
Кури интерфейсы и абстрактные классы