ospaz-site/users/models.py

70 lines
2.3 KiB
Python

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)
password = models.CharField(verbose_name="Пароль", max_length=128)
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,
'change_users': 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