2024-01-18 12:03:37 +01:00

89 lines
3.0 KiB
Python

from django.db import models
# Create your models here.
from django.contrib.auth.models import (AbstractBaseUser,BaseUserManager, PermissionsMixin)
class UserManager(BaseUserManager):
'''Manager for users'''
def create_user(self, email, password=None, **extra): #kreiran regular user
if not email:
raise ValueError('Valid e-mail must be provided!')
user = self.model(email=self.normalize_email(email), **extra)
user.username
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password, first_name, last_name): #kreiran superuser s dodatnim zahtjevima
user = self.create_user(email, password, **{"first_name": first_name, "last_name": last_name})
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class Organization(models.Model):
name = models.CharField(max_length=128)
contact_email = models.EmailField(blank=True)
class User(AbstractBaseUser, PermissionsMixin):
LANGUAGE_CHOICES = (
('hr', 'Hrvatski'),
('en', 'English')
)
username = models.CharField(max_length=255, blank=True)
email = models.EmailField(max_length=255, unique=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
first_name = models.CharField(max_length=127, blank=True)
last_name = models.CharField(max_length=127, blank=True)
organization = models.ForeignKey(Organization, on_delete=models.SET_NULL, null=True) #povezuje korisnike s organizacijom
date_joined = models.DateTimeField(auto_now_add=True)
email_confirmed = models.BooleanField(default=False)
language_preference = models.CharField(choices=LANGUAGE_CHOICES, max_length=8, default='hr')
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
@property
def is_admin(self):
return self.groups.exists() and self.groups.first().name == 'Admin'
@property
def is_editor(self):
return self.groups.exists() and self.groups.first().name == 'Editor'
@property
def is_wiever(self):
return self.groups.exists() and self.groups.first().name == 'Wiever'
@property
def app_role_name(self):
return self.groups.first().name if self.groups.exists() else ''
@property
def app_role_id(self):
return self.groups.first().id if self.groups.exists() else None
@property
def full_name(self):
return '{} {}'.format(self.first_name, self.last_name)
class PasswordResetRequest(models.Model):
received_on = models.DateTimeField(auto_now_add=True)
uid = models.UUIDField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
confirmed = models.BooleanField(default=False)
confirmed_on = models.DateTimeField(null=True)
def __str__(self):
return self.received_on.isoformat()