You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.5 KiB
Python
108 lines
3.5 KiB
Python
from django.contrib.auth.base_user import BaseUserManager
|
|
from django.contrib.auth.models import AbstractUser
|
|
from django.db import models
|
|
|
|
class ClientPermission(models.Model):
|
|
codename = models.CharField(max_length=100, default='')
|
|
name = models.CharField(max_length=255, default='')
|
|
|
|
class Meta:
|
|
managed = True
|
|
default_permissions = ()
|
|
permissions = (
|
|
('can_book_container', 'Can book container'),
|
|
('can_view_bookings', 'Can view bookings'),
|
|
('can_manage_company_users', 'Can manage company users'),
|
|
)
|
|
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class EmployeePermission(models.Model):
|
|
codename = models.CharField(max_length=100, default='')
|
|
name = models.CharField(max_length=255, default='')
|
|
|
|
class Meta:
|
|
managed = True
|
|
default_permissions = ()
|
|
permissions = (
|
|
('can_manage_containers', 'Can manage containers'),
|
|
('can_view_reports', 'Can view reports'),
|
|
('can_handle_operations', 'Can handle operations'),
|
|
)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class CustomUserManager(BaseUserManager):
|
|
def create_user(self, email, password=None, **extra_fields):
|
|
if not email:
|
|
raise ValueError('Users must have an email address')
|
|
email = self.normalize_email(email)
|
|
user = self.model(email=email, **extra_fields)
|
|
user.set_password(password)
|
|
user.save(using=self._db)
|
|
return user
|
|
|
|
def create_superuser(self, email, password=None, **extra_fields):
|
|
extra_fields.setdefault('is_staff', True)
|
|
extra_fields.setdefault('is_superuser', True)
|
|
extra_fields.setdefault('is_active', True)
|
|
extra_fields.setdefault('user_type', 'AD') # Set user_type to admin
|
|
|
|
if extra_fields.get('is_staff') is not True:
|
|
raise ValueError('Superuser must have is_staff=True.')
|
|
if extra_fields.get('is_superuser') is not True:
|
|
raise ValueError('Superuser must have is_superuser=True.')
|
|
|
|
return self.create_user(email, password, **extra_fields)
|
|
|
|
|
|
class DepotUser(AbstractUser):
|
|
|
|
class UserType(models.TextChoices):
|
|
BARRIER_STAFF = 'BS', 'Barrier Staff'
|
|
COMPANY_ADMIN = 'CA', 'Company Admin'
|
|
EMPLOYEE = 'EM', 'Employee'
|
|
CLIENT = 'CL', 'Client',
|
|
ADMIN = 'AD', 'Admin'
|
|
|
|
objects = CustomUserManager()
|
|
|
|
user_type = models.CharField(
|
|
max_length=2,
|
|
choices=UserType.choices,
|
|
default=UserType.CLIENT
|
|
)
|
|
|
|
phone_number = models.CharField(max_length=15, blank=True, null=True)
|
|
email = models.EmailField(unique=True, blank=False, null=False)
|
|
company = models.ForeignKey(
|
|
'common.CompanyModel',
|
|
on_delete=models.CASCADE,
|
|
related_name='user_lines',
|
|
blank=True,
|
|
null=True
|
|
)
|
|
line = models.ForeignKey(
|
|
'common.LinesModel',
|
|
on_delete=models.CASCADE,
|
|
related_name='user_lines',
|
|
blank=True,
|
|
null=True
|
|
)
|
|
|
|
company_permissions = models.ManyToManyField('ClientPermission')
|
|
employee_permissions = models.ManyToManyField('EmployeePermission', blank=True)
|
|
|
|
def has_company_perm(self, perm_codename):
|
|
if self.is_superuser:
|
|
return True
|
|
return self.company_permissions.filter(codename=perm_codename).exists()
|
|
|
|
def has_employee_perm(self, perm_codename):
|
|
if self.is_superuser:
|
|
return True
|
|
return self.employee_permissions.filter(codename=perm_codename).exists() |