From 1c16ba2889d64c4f67211012c83a634b4a178470 Mon Sep 17 00:00:00 2001 From: VladislavOstapov Date: Thu, 25 Jan 2024 17:51:40 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=B2?= =?UTF-8?q?=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F=D1=82=D1=8C=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D0=BD=D1=8B=D0=B5=20=D1=83=D1=80=D0=BE=D0=B2=D0=BD?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B0=20(=D1=81?= =?UTF-8?q?=D0=B5=D0=B9=D1=87=D0=B0=D1=81=203:=20=D0=BE=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80,=20=D0=B8=D0=BD=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D1=80,=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D1=82=D0=BE=D1=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/account/list.html | 4 ++-- templates/account/register.html | 9 ++------- templates/account/view.html | 2 +- users/forms.py | 2 +- users/models.py | 36 +++++++++++++++++---------------- 5 files changed, 25 insertions(+), 28 deletions(-) diff --git a/templates/account/list.html b/templates/account/list.html index 46dd7a4..95f9ee4 100644 --- a/templates/account/list.html +++ b/templates/account/list.html @@ -35,7 +35,7 @@ Логин - Админ + Уровень доступа Последний вход Последнее обновление пароля Зарегистрирован @@ -45,7 +45,7 @@ {% for u in users %} {{ u.login }} - {{ u.is_superuser }} + {{ u.access_level }} {{ u.last_login }} {{ u.last_password_change }} {{ u.registered }} diff --git a/templates/account/register.html b/templates/account/register.html index 2dea048..ebbeeff 100644 --- a/templates/account/register.html +++ b/templates/account/register.html @@ -28,7 +28,7 @@ font-weight: bolder; } - .form-row input { + .form-row input, .form-row select { padding: 8px; width: 100%; box-sizing: border-box; @@ -39,7 +39,7 @@ min-height: 2em; } - .form-row input:focus { + .form-row input:focus, .form-row select:focus { outline: none; border: none; border-bottom: var(--brand-text) 2px solid; @@ -59,11 +59,6 @@ padding: 0.5em; margin: 0.2em; } - - .errorlist { - padding: 0; - } - {% endblock %} diff --git a/templates/account/view.html b/templates/account/view.html index cce6941..bcdfcf6 100644 --- a/templates/account/view.html +++ b/templates/account/view.html @@ -16,7 +16,7 @@ {% block content %}

Вернуться на главную

-

Статус администратора: {{ view_user.is_superuser }}

+

Уровень доступа: {{ view_user.access_level }}

Последний вход: {{ view_user.last_login }}

Последнее обновление пароля: {{ view_user.last_password_change }} {% if perms.users.change_user or view_user.login == user.login %} diff --git a/users/forms.py b/users/forms.py index eb1c2a4..ee3eb79 100644 --- a/users/forms.py +++ b/users/forms.py @@ -6,4 +6,4 @@ from .models import User class UserRegisterForm(UserCreationForm): class Meta(UserCreationForm.Meta): model = User - fields = ('login', 'is_superuser') + fields = ('login', 'access_level') diff --git a/users/models.py b/users/models.py index 8d14048..f7cea95 100644 --- a/users/models.py +++ b/users/models.py @@ -6,15 +6,21 @@ import ospaz_site.settings as settings from .managers import CustomUserManager +class UserAccessLevel(models.IntegerChoices): + BASIC = 0, 'Оператор' + ENGINEER = 10, 'Инженер' + ADMIN = 100, 'Администратор' + + 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="Администратор") + access_level = models.IntegerField(choices=UserAccessLevel, default=UserAccessLevel.BASIC, + 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="Последняя смена пароля") @@ -38,25 +44,21 @@ class User(AbstractBaseUser): if not self.is_authenticated: return False - secure_level = 0 - if self.is_superuser: - secure_level = 1 - permissions = { - 'users.add_user': 1, - 'users.change_user': 1, - 'users.delete_user': 1, - 'users.view_user': 1, + 'users.add_user': UserAccessLevel.ADMIN, + 'users.change_user': UserAccessLevel.ADMIN, + 'users.delete_user': UserAccessLevel.ADMIN, + 'users.view_user': UserAccessLevel.ADMIN, - 'logs_service.add_mbtankrecord': 1, - 'logs_service.change_mbtankrecord': 1, - 'logs_service.delete_mbtankrecord': 1, - 'logs_service.view_mbtankrecord': 0, + 'logs_service.add_mbtankrecord': UserAccessLevel.ADMIN, + 'logs_service.change_mbtankrecord': UserAccessLevel.ADMIN, + 'logs_service.delete_mbtankrecord': UserAccessLevel.ADMIN, + 'logs_service.view_mbtankrecord': UserAccessLevel.BASIC, - 'logs_service.view_pump_stats': 1 + 'logs_service.view_pump_stats': UserAccessLevel.ENGINEER } if perm in permissions: - if permissions[perm] <= secure_level: + if permissions[perm] <= self.access_level: return True elif settings.DEBUG: print(f"User.has_perm: unknown permission - '{perm}'") @@ -69,4 +71,4 @@ class User(AbstractBaseUser): return True def has_module_perms(self, package_name): - return self.is_superuser + return self.access_level == UserAccessLevel.ADMIN