from typing import List from django.contrib.auth.models import AbstractBaseUser, BaseUserManager from django.db import models class UserManager(BaseUserManager): """ Custom user manager that understands emails """ def create_user(self, email, password=None): user = self.create(email=email) if password: user.set_password(password) user.save() return user def create_superuser(self, email, password=None): user = self.create(email=email, admin=True) if password: user.set_password(password) user.save() return user class User(AbstractBaseUser): """ Custom user model that only needs an email """ email = models.EmailField(unique=True) admin = models.BooleanField(default=False) moderator = models.BooleanField(default=False) banned = models.BooleanField(default=False) deleted = models.BooleanField(default=False) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) USERNAME_FIELD = "email" EMAIL_FIELD = "email" REQUIRED_FIELDS: List[str] = [] objects = UserManager() @property def is_active(self): return not (self.deleted or self.banned) @property def is_superuser(self): return self.admin @property def is_staff(self): return self.admin def has_module_perms(self, module): return self.admin def has_perm(self, perm): return self.admin