summaryrefslogtreecommitdiffstats
path: root/users/models/user.py
diff options
context:
space:
mode:
authorAndrew Godwin2022-11-05 14:17:27 -0600
committerAndrew Godwin2022-11-05 14:17:27 -0600
commitd77dcf62b4005a0f36ef2fa7ba6d3651d2ef38d7 (patch)
treedd356a933b8179a22e5da6e938acd96a175ac0d6 /users/models/user.py
downloadtakahe-d77dcf62b4005a0f36ef2fa7ba6d3651d2ef38d7.tar.gz
takahe-d77dcf62b4005a0f36ef2fa7ba6d3651d2ef38d7.tar.bz2
takahe-d77dcf62b4005a0f36ef2fa7ba6d3651d2ef38d7.zip
Initial commit (users and statuses)
Diffstat (limited to 'users/models/user.py')
-rw-r--r--users/models/user.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/users/models/user.py b/users/models/user.py
new file mode 100644
index 0000000..de51380
--- /dev/null
+++ b/users/models/user.py
@@ -0,0 +1,58 @@
+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