Refactored to make BaseAuthenticatedUser an abstract class - this
provides more clear separation of roles