title: Django 1.5: Understanding of AbstractBaseUser and permissions
body: <p>I created an user app <code>MyUser</code> which is an extension of <code>AbstractBaseUser</code>. I was under the impression that the model <code>MyUser</code> will replace the standard <code>Auth.User</code>, as long as it is mentioned in <code>settings.py</code></p>
  
  <p>AUTH_PROFILE_MODULE = 'profile.MyUser'</p>
  
  <p><strong>My trouble is now that I can't set the permissions for users registered in the MyUser model. When I try to set the group memberships and permissions, I get the error <code>User' instance expected, got &lt;MyUser: username&gt;</code>.</strong></p>
  
  <p>How can I add users of my user model to the permissions and correct groups?</p>
  
  <pre><code>class MyUserManager(BaseUserManager):
      def create_user(self, username, email, phone, password=None, company=False):
          if not email:
              raise ValueError('Users must have an email address')
          if not username: username = email.split('@')[0]
          user = self.model(
              email=MyUserManager.normalize_email(email),
              username=username,phone=phone,)
          user.set_password(password)
          user.save(using=self._db)
  
          # add to user group and set permissions
          if company: 
              g = Group.objects.get(name='company')
              p = Permission.objects.get(codename='add_company')
          else: 
              g = Group.objects.get(name='user')
              p = Permission.objects.get(codename='add_user')
          g.user_set.add(user)
          user.user_permissions.add(p)
          return user
  
  class MyUser(AbstractBaseUser):
      username = models.CharField(max_length=254, unique=True, blank=True, null=True)
      email = models.EmailField(max_length=254, unique=True, db_index=True)
      phone = models.CharField(_('Phone Number'), max_length=25, blank=True, null=True,)
  
      is_active = models.BooleanField(default=True)
      is_admin = models.BooleanField(default=False)
      USERNAME_FIELD = 'email'
      REQUIRED_FIELDS = ['phone']
  
      objects = MyUserManager()
  
      def get_full_name(self):
          return self.email
      ...
  </code></pre>