from django.contrib.auth.models import AbstractBaseUser from django.db import models from django.utils import timezone from django.core.validators import MinLengthValidator import ospaz_site.settings as settings from .managers import CustomUserManager class User(AbstractBaseUser): login = models.CharField(max_length=16, validators=[MinLengthValidator(3)], verbose_name="Логин", unique=True) last_login = models.DateTimeField(verbose_name="Последний вход", blank=True, null=True) is_superuser = models.BooleanField(default=False, verbose_name="Администратор") registered = models.DateTimeField(default=timezone.now, editable=False, verbose_name="Время регистрации") def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.is_staff = self.is_superuser last_password_change = models.DateTimeField(default=timezone.now, verbose_name="Последняя смена пароля") def set_password(self, raw_password): super().set_password(raw_password) self.last_password_change = timezone.now() USERNAME_FIELD = "login" REQUIRED_FIELDS = [] objects = CustomUserManager() def __str__(self): return self.login class Meta: default_permissions = () def has_perm(self, perm, obj=None): # управления правами пользователя if not self.is_authenticated: return False secure_level = 0 if self.is_superuser: secure_level = 1 permissions = { 'view_logs': 0, 'view_pump_stats': 1, 'users.add_user': 1, 'users.change_user': 1, 'users.delete_user': 1, 'users.view_user': 1 } if perm in permissions: if permissions[perm] <= secure_level: return True elif settings.DEBUG: print(f"User.has_perm: unknown permission - '{perm}'") return False def has_perms(self, perm_list, obj=None): for p in perm_list: if not self.has_perm(p, obj): return False return True def has_module_perms(self, package_name): return self.is_superuser