1
0
mirror of https://gitlab.crans.org/mediatek/med.git synced 2025-07-07 03:04:01 +02:00

Swap AbstractBaseUser to AbstractUser

This commit is contained in:
Alexandre Iooss
2019-08-08 12:16:40 +02:00
parent 0b42060c51
commit 781b2087a3
18 changed files with 242 additions and 243 deletions

View File

@ -5,109 +5,40 @@
import datetime
import uuid
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.contrib.auth.validators import ASCIIUsernameValidator, UnicodeUsernameValidator
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils import six, timezone
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from med.settings import MAX_EMPRUNT, REQ_EXPIRE_HRS
class UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, username, name, last_name, email, password=None, su=False):
"""
Creates and saves a User with the given username, email and password.
"""
if not username:
raise ValueError('The given username must be set')
email = self.normalize_email(email)
username = self.model.normalize_username(username)
user = self.model(
username=username,
name=name,
last_name=last_name,
email=email,
)
user.set_password(password)
user.save(using=self._db)
if su:
user.make_admin()
return user
def create_user(self, username, name, last_name, email, password=None):
"""
Creates and saves a User with the given username, name, last_name, email,
and password.
"""
return self._create_user(username, name, last_name, email, password, False)
def create_superuser(self, username, name, last_name, email, password):
"""
Creates and saves a superuser with the given username, name, last_name,
email, and password.
"""
return self._create_user(username, name, last_name, email, password, True)
class User(AbstractBaseUser):
username_validator = UnicodeUsernameValidator() if six.PY3 else ASCIIUsernameValidator()
name = models.CharField(max_length=255)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
email = models.EmailField(_('email address'), blank=True)
telephone = models.CharField(max_length=15, null=True, blank=True)
adresse = models.CharField(max_length=255, null=True, blank=True)
maxemprunt = models.IntegerField(default=MAX_EMPRUNT, help_text="Maximum d'emprunts autorisés")
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
class User(AbstractUser):
telephone = models.CharField(
verbose_name=_('phone number'),
max_length=15,
null=True,
blank=True,
)
comment = models.CharField(help_text="Commentaire, promo", max_length=255, blank=True)
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this admin site.'),
address = models.CharField(
verbose_name=_('address'),
max_length=255,
null=True,
blank=True,
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
maxemprunt = models.IntegerField(
verbose_name=_('maximum borrowed'),
help_text=_('Maximal amount of simultaneous borrowed item authorized.'),
default=MAX_EMPRUNT,
)
comment = models.CharField(
verbose_name=_('comment'),
help_text=_('Promotion...'),
max_length=255,
blank=True,
)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
objects = UserManager()
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['name', 'last_name', 'email']
@property
def is_admin(self):
try:
Right.objects.get(user=self, right__listright='admin')
except Right.DoesNotExist:
return False
return True
@is_admin.setter
def is_admin(self, value):
if value and not self.is_admin:
self.make_admin()
elif not value and self.is_admin:
self.un_admin()
REQUIRED_FIELDS = ['first_name', 'last_name', 'email']
def has_perms(self, perms, obj=None):
for perm in perms:
@ -117,12 +48,6 @@ class User(AbstractBaseUser):
except Right.DoesNotExist:
return False
def get_full_name(self):
return '%s %s' % (self.name, self.last_name)
def get_short_name(self):
return self.name
def has_perm(self, perm, obj=None):
return True
@ -138,27 +63,6 @@ class User(AbstractBaseUser):
last_adh_year = Adhesion.objects.all().order_by('annee_debut').reverse().first()
return last_adh_year and self in last_adh_year.adherent.all()
def get_admin_right(self):
admin, created = ListRight.objects.get_or_create(listright="admin")
return admin
def make_admin(self):
""" Make User admin """
user_admin_right = Right(user=self, right=self.get_admin_right())
user_admin_right.save()
self.is_staff = True
self.save()
def un_admin(self):
try:
user_right = Right.objects.get(user=self, right=self.get_admin_right())
except Right.DoesNotExist:
return
user_right.delete()
def __str__(self):
return self.username
class Request(models.Model):
PASSWD = 'PW'
@ -179,7 +83,7 @@ class Request(models.Model):
+ datetime.timedelta(hours=REQ_EXPIRE_HRS)
if not self.token:
self.token = str(uuid.uuid4()).replace('-', '') # remove hyphens
super(Request, self).save()
super().save()
class Right(models.Model):