added a generic user model implementation to support custom user models