added controller abstract and user model