User model with validation