text: from django.db import models
  from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
  
  # Create your models here.
  
  
  class UserManger(BaseUserManager):
      def create_user(self, email, username, password=None):
          if not email:
              raise ValueError('Users must have an email address')
          if not username:
              raise ValueError('Users must have a username')
  
          user = self.model(
              email=self.normalize_email(email),
              username=username,
          )
  
          user.set_password(password)
          user.save(using=self._db)
          return user
  
      def create_superuser(self, email, username, password):
          user = self.create_user(
              email=self.normalize_email(email),
              password=password,
              username=username,
          )
          user.is_admin = True
          user.is_staff = True
          user.is_superuser = True
          user.save(using=self._db)
          return user
  
  
  class OkUser(AbstractBaseUser):
      email = models.EmailField(verbose_name="email", max_length=60, unique=True)
      username = models.CharField(max_length=30, unique=True)
      date_joined = models.DateTimeField(
          verbose_name='date joined', auto_now_add=True)
      last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
      is_admin = models.BooleanField(default=False)
      is_active = models.BooleanField(default=True)
      is_staff = models.BooleanField(default=False)
      is_superuser = models.BooleanField(default=False)
      first_name = models.CharField(max_length=30)
      last_name = models.CharField(max_length=30)
      # other , advisor,  mk ,activist
      role = models.CharField(max_length=30, default='other')
  
      USERNAME_FIELD = 'email'
      REQUIRED_FIELDS = ['username']
  
      objects = UserManger()
  
      def __str__(self):
          return self.email
  
      # For checking permissions. to keep it simple all admin have ALL permissons
      def has_perm(self, perm, obj=None):
          return self.is_admin
  
      # Does this user have permission to view this app? (ALWAYS YES FOR SIMPLICITY)
      def has_module_perms(self, app_label):
          return True
  
      def getUserResponse(self, token):
          return {
              'token': token,
              'username': self.username,
              'firstName': self.first_name,
              'lastName': self.last_name,
              'email': self.email,
              'isActive': self.is_active,
          }
  