Change User to get_user_model
This commit is contained in:
parent
4b25ec4b33
commit
9c9b4dd08b
@ -24,7 +24,7 @@ BASE_DIR = Path(__file__).resolve().parent.parent
|
|||||||
SECRET_KEY = os.getenv('ACTRL_SECRET_KEY', 'empty')
|
SECRET_KEY = os.getenv('ACTRL_SECRET_KEY', 'empty')
|
||||||
|
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = bool(int(os.getenv('ACTRL_DEBUG', 1)))
|
DEBUG = bool(int(os.getenv('ACTRL_DEBUG', '1')))
|
||||||
|
|
||||||
ALLOWED_HOSTS = [
|
ALLOWED_HOSTS = [
|
||||||
'127.0.0.1',
|
'127.0.0.1',
|
||||||
@ -60,8 +60,8 @@ ROOT_URLCONF = 'access_controller.urls'
|
|||||||
|
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
EMAIL_HOST = os.getenv('ACTRL_EMAIL_HOST', 'smtp.gmail.com')
|
EMAIL_HOST = os.getenv('ACTRL_EMAIL_HOST', 'smtp.gmail.com')
|
||||||
EMAIL_PORT = int(os.getenv('ACTRL_EMAIL_PORT', 587))
|
EMAIL_PORT = int(os.getenv('ACTRL_EMAIL_PORT', '587'))
|
||||||
EMAIL_USE_TLS = bool(int(os.getenv('ACTRL_EMAIL_TLS', 1)))
|
EMAIL_USE_TLS = bool(int(os.getenv('ACTRL_EMAIL_TLS', '1')))
|
||||||
EMAIL_HOST_USER = os.getenv('ACTRL_EMAIL_HOST_USER', 'group02django@gmail.com')
|
EMAIL_HOST_USER = os.getenv('ACTRL_EMAIL_HOST_USER', 'group02django@gmail.com')
|
||||||
EMAIL_HOST_PASSWORD = os.getenv('ACTRL_EMAIL_HOST_PASSWORD', 'djangogroup02')
|
EMAIL_HOST_PASSWORD = os.getenv('ACTRL_EMAIL_HOST_PASSWORD', 'djangogroup02')
|
||||||
DEFAULT_FROM_EMAIL = os.getenv('ACTRL_FROM_EMAIL', EMAIL_HOST_USER)
|
DEFAULT_FROM_EMAIL = os.getenv('ACTRL_FROM_EMAIL', EMAIL_HOST_USER)
|
||||||
@ -154,8 +154,8 @@ AUTHENTICATION_BACKENDS = [
|
|||||||
|
|
||||||
|
|
||||||
ZENDESK_ROLES = {
|
ZENDESK_ROLES = {
|
||||||
'engineer': int(os.getenv('ENG_CROLE_ID', 0)),
|
'engineer': int(os.getenv('ENG_CROLE_ID', '0')),
|
||||||
'light_agent': int(os.getenv('LA_CROLE_ID', 0)),
|
'light_agent': int(os.getenv('LA_CROLE_ID', '0')),
|
||||||
}
|
}
|
||||||
|
|
||||||
ZENDESK_GROUPS = {
|
ZENDESK_GROUPS = {
|
||||||
@ -165,7 +165,7 @@ ZENDESK_GROUPS = {
|
|||||||
|
|
||||||
SOLVED_TICKETS_EMAIL = os.getenv('ST_EMAIL')
|
SOLVED_TICKETS_EMAIL = os.getenv('ST_EMAIL')
|
||||||
|
|
||||||
ZENDESK_MAX_AGENTS = int(os.getenv('LICENSE_NO', 0))
|
ZENDESK_MAX_AGENTS = int(os.getenv('LICENSE_NO', '0'))
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
# Use Django's standard `django.contrib.auth` permissions,
|
# Use Django's standard `django.contrib.auth` permissions,
|
||||||
@ -175,7 +175,7 @@ REST_FRAMEWORK = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
ONE_DAY = int(os.getenv('SHIFTH', 0)) # Количество часов в 1 рабочем дне
|
ONE_DAY = int(os.getenv('SHIFTH', '0')) # Количество часов в 1 рабочем дне
|
||||||
|
|
||||||
ACTRL_ZENDESK_SUBDOMAIN = os.getenv('ACTRL_ZENDESK_SUBDOMAIN') or os.getenv('ZD_DOMAIN')
|
ACTRL_ZENDESK_SUBDOMAIN = os.getenv('ACTRL_ZENDESK_SUBDOMAIN') or os.getenv('ZD_DOMAIN')
|
||||||
ACTRL_API_EMAIL = os.getenv('ACTRL_API_EMAIL') or os.getenv('ACCESS_CONTROLLER_API_EMAIL')
|
ACTRL_API_EMAIL = os.getenv('ACTRL_API_EMAIL') or os.getenv('ACCESS_CONTROLLER_API_EMAIL')
|
||||||
|
@ -5,7 +5,7 @@ import logging
|
|||||||
from datetime import timedelta, datetime, date
|
from datetime import timedelta, datetime, date
|
||||||
from typing import Optional, Union
|
from typing import Optional, Union
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth import get_user_model
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.core.handlers.wsgi import WSGIRequest
|
from django.core.handlers.wsgi import WSGIRequest
|
||||||
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
|
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
|
||||||
@ -21,7 +21,7 @@ from main.models import UserProfile, RoleChangeLogs, UnassignedTicket, Unassigne
|
|||||||
from main.zendesk_admin import zenpy
|
from main.zendesk_admin import zenpy
|
||||||
|
|
||||||
|
|
||||||
def update_role(user_profile: UserProfile, role: int, who_changes: User) -> None:
|
def update_role(user_profile: UserProfile, role: int, who_changes: get_user_model()) -> None:
|
||||||
"""
|
"""
|
||||||
Функция меняет роль пользователя.
|
Функция меняет роль пользователя.
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ def update_role(user_profile: UserProfile, role: int, who_changes: User) -> None
|
|||||||
zendesk.admin.users.update(user)
|
zendesk.admin.users.update(user)
|
||||||
|
|
||||||
|
|
||||||
def make_engineer(user_profile: UserProfile, who_changes: User) -> None:
|
def make_engineer(user_profile: UserProfile, who_changes: get_user_model()) -> None:
|
||||||
"""
|
"""
|
||||||
Функция устанавливает пользователю роль инженера.
|
Функция устанавливает пользователю роль инженера.
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ def make_engineer(user_profile: UserProfile, who_changes: User) -> None:
|
|||||||
update_role(user_profile, ROLES['engineer'], who_changes)
|
update_role(user_profile, ROLES['engineer'], who_changes)
|
||||||
|
|
||||||
|
|
||||||
def make_light_agent(user_profile: UserProfile, who_changes: User) -> None:
|
def make_light_agent(user_profile: UserProfile, who_changes: get_user_model()) -> None:
|
||||||
"""
|
"""
|
||||||
Функция устанавливает пользователю роль легкого агента.
|
Функция устанавливает пользователю роль легкого агента.
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ def update_users_in_model():
|
|||||||
users = get_users_list()
|
users = get_users_list()
|
||||||
for user in users:
|
for user in users:
|
||||||
try:
|
try:
|
||||||
profile = User.objects.get(email=user.email).userprofile
|
profile = get_user_model().objects.get(email=user.email).userprofile
|
||||||
update_user_in_model(profile, user)
|
update_user_in_model(profile, user)
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
pass
|
pass
|
||||||
@ -409,9 +409,9 @@ class StatisticData:
|
|||||||
try:
|
try:
|
||||||
self.data = RoleChangeLogs.objects.filter(
|
self.data = RoleChangeLogs.objects.filter(
|
||||||
change_time__range=[self.start_date, self.end_date + timedelta(days=1)],
|
change_time__range=[self.start_date, self.end_date + timedelta(days=1)],
|
||||||
user=User.objects.get(email=self.email),
|
user=get_user_model().objects.get(email=self.email),
|
||||||
).order_by('change_time')
|
).order_by('change_time')
|
||||||
except User.DoesNotExist:
|
except get_user_model().DoesNotExist:
|
||||||
self.errors += ['Пользователь не найден']
|
self.errors += ['Пользователь не найден']
|
||||||
|
|
||||||
def _init_statistic(self) -> None:
|
def _init_statistic(self) -> None:
|
||||||
@ -475,7 +475,7 @@ class StatisticData:
|
|||||||
|
|
||||||
:param first_log: Первый лог
|
:param first_log: Первый лог
|
||||||
"""
|
"""
|
||||||
self.fill_daterange(max(User.objects.get(email=self.email).date_joined.date(), self.start_date),
|
self.fill_daterange(max(get_user_model().objects.get(email=self.email).date_joined.date(), self.start_date),
|
||||||
first_log.change_time.date())
|
first_log.change_time.date())
|
||||||
self.statistic[first_log.change_time.date()] += get_timedelta(first_log).total_seconds()
|
self.statistic[first_log.change_time.date()] += get_timedelta(first_log).total_seconds()
|
||||||
|
|
||||||
@ -564,7 +564,7 @@ class CsvFormatter(logging.Formatter):
|
|||||||
return msg
|
return msg
|
||||||
|
|
||||||
|
|
||||||
def log(user: User, admin: int = 0) -> None:
|
def log(user: get_user_model(), admin: int = 0) -> None:
|
||||||
"""
|
"""
|
||||||
Функция осуществляет запись логов в базу данных и csv файл.
|
Функция осуществляет запись логов в базу данных и csv файл.
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth import get_user_model
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
@ -24,7 +24,7 @@ class UserProfile(models.Model):
|
|||||||
('has_control_access', 'Can view admin page'),
|
('has_control_access', 'Can view admin page'),
|
||||||
)
|
)
|
||||||
|
|
||||||
user = models.OneToOneField(to=User, on_delete=models.CASCADE, help_text='Пользователь')
|
user = models.OneToOneField(to=get_user_model(), on_delete=models.CASCADE, help_text='Пользователь')
|
||||||
role = models.CharField(default='None', max_length=100, help_text='Глобальное имя роли пользователя')
|
role = models.CharField(default='None', max_length=100, help_text='Глобальное имя роли пользователя')
|
||||||
custom_role_id = models.IntegerField(default=0, help_text='Код роли пользователя')
|
custom_role_id = models.IntegerField(default=0, help_text='Код роли пользователя')
|
||||||
image = models.URLField(null=True, blank=True, help_text='Аватарка')
|
image = models.URLField(null=True, blank=True, help_text='Аватарка')
|
||||||
@ -44,7 +44,7 @@ class UserProfile(models.Model):
|
|||||||
return 'UNDEFINED'
|
return 'UNDEFINED'
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=User)
|
@receiver(post_save, sender=get_user_model())
|
||||||
def create_user_profile(instance, created, **kwargs) -> None:
|
def create_user_profile(instance, created, **kwargs) -> None:
|
||||||
"""
|
"""
|
||||||
Функция создания профиля пользователя (Userprofile) при регистрации пользователя.
|
Функция создания профиля пользователя (Userprofile) при регистрации пользователя.
|
||||||
@ -58,7 +58,7 @@ def create_user_profile(instance, created, **kwargs) -> None:
|
|||||||
UserProfile.objects.create(user=instance)
|
UserProfile.objects.create(user=instance)
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=User)
|
@receiver(post_save, sender=get_user_model())
|
||||||
def save_user_profile(instance, **kwargs) -> None:
|
def save_user_profile(instance, **kwargs) -> None:
|
||||||
"""
|
"""
|
||||||
Функция записи БД профиля пользователя.
|
Функция записи БД профиля пользователя.
|
||||||
@ -74,12 +74,12 @@ class RoleChangeLogs(models.Model):
|
|||||||
"""
|
"""
|
||||||
Модель для логирования изменений ролей пользователя.
|
Модель для логирования изменений ролей пользователя.
|
||||||
"""
|
"""
|
||||||
user = models.ForeignKey(to=User, on_delete=models.CASCADE,
|
user = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE,
|
||||||
help_text='Пользователь, которому присвоили другую роль')
|
help_text='Пользователь, которому присвоили другую роль')
|
||||||
old_role = models.IntegerField(default=0, help_text='Старая роль')
|
old_role = models.IntegerField(default=0, help_text='Старая роль')
|
||||||
new_role = models.IntegerField(default=0, help_text='Присвоенная роль')
|
new_role = models.IntegerField(default=0, help_text='Присвоенная роль')
|
||||||
change_time = models.DateTimeField(default=timezone.now, help_text='Дата и время изменения роли')
|
change_time = models.DateTimeField(default=timezone.now, help_text='Дата и время изменения роли')
|
||||||
changed_by = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='changed_by',
|
changed_by = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name='changed_by',
|
||||||
help_text='Кем была изменена роль')
|
help_text='Кем была изменена роль')
|
||||||
|
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ class UnassignedTicket(models.Model):
|
|||||||
"""
|
"""
|
||||||
Модель не распределенного тикета.
|
Модель не распределенного тикета.
|
||||||
"""
|
"""
|
||||||
assignee = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='tickets',
|
assignee = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name='tickets',
|
||||||
help_text='Пользователь, с которого снят тикет')
|
help_text='Пользователь, с которого снят тикет')
|
||||||
ticket_id = models.IntegerField(help_text='Номер тикера, для которого сняли ответственного')
|
ticket_id = models.IntegerField(help_text='Номер тикера, для которого сняли ответственного')
|
||||||
status = models.IntegerField(choices=UnassignedTicketStatus.choices, default=UnassignedTicketStatus.UNASSIGNED,
|
status = models.IntegerField(choices=UnassignedTicketStatus.choices, default=UnassignedTicketStatus.UNASSIGNED,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
Сериализаторы.
|
Сериализаторы.
|
||||||
"""
|
"""
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth import get_user_model
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from main.models import UserProfile
|
from main.models import UserProfile
|
||||||
from access_controller.settings import ZENDESK_ROLES
|
from access_controller.settings import ZENDESK_ROLES
|
||||||
@ -17,7 +17,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
:type email: :class:`list`
|
:type email: :class:`list`
|
||||||
"""
|
"""
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = get_user_model()
|
||||||
fields = ['email']
|
fields = ['email']
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth import get_user_model
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.test import TestCase, Client
|
from django.test import TestCase, Client
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@ -71,13 +71,13 @@ class RegistrationTestCase(TestCase):
|
|||||||
def test_registration_user_creating(self):
|
def test_registration_user_creating(self):
|
||||||
with self.settings(EMAIL_BACKEND=self.email_backend):
|
with self.settings(EMAIL_BACKEND=self.email_backend):
|
||||||
self.client.post(reverse('registration'), data={'email': self.any_zendesk_user_email})
|
self.client.post(reverse('registration'), data={'email': self.any_zendesk_user_email})
|
||||||
user = User.objects.get(email=self.any_zendesk_user_email)
|
user = get_user_model().objects.get(email=self.any_zendesk_user_email)
|
||||||
zendesk_user = zenpy.get_user(self.any_zendesk_user_email)
|
zendesk_user = zenpy.get_user(self.any_zendesk_user_email)
|
||||||
self.assertEqual(user.userprofile.name, zendesk_user.name)
|
self.assertEqual(user.userprofile.name, zendesk_user.name)
|
||||||
|
|
||||||
def test_permissions_applying(self):
|
def test_permissions_applying(self):
|
||||||
with self.settings(EMAIL_BACKEND=self.email_backend):
|
with self.settings(EMAIL_BACKEND=self.email_backend):
|
||||||
self.client.post(reverse('registration'), data={'email': self.zendesk_admin_email})
|
self.client.post(reverse('registration'), data={'email': self.zendesk_admin_email})
|
||||||
user = User.objects.get(email=self.zendesk_admin_email)
|
user = get_user_model().objects.get(email=self.zendesk_admin_email)
|
||||||
self.assertEqual(user.userprofile.role, 'admin')
|
self.assertEqual(user.userprofile.role, 'admin')
|
||||||
self.assertTrue(user.has_perm('main.has_control_access'))
|
self.assertTrue(user.has_perm('main.has_control_access'))
|
||||||
|
@ -9,7 +9,8 @@ from typing import Dict, Any, Optional
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
|
||||||
from django.contrib.auth.models import User, Permission
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.contrib.auth.models import Permission
|
||||||
from django.contrib.auth.tokens import default_token_generator
|
from django.contrib.auth.tokens import default_token_generator
|
||||||
from django.contrib.auth.forms import PasswordResetForm
|
from django.contrib.auth.forms import PasswordResetForm
|
||||||
from django.contrib.auth.views import LoginView
|
from django.contrib.auth.views import LoginView
|
||||||
@ -83,7 +84,7 @@ class CustomRegistrationView(RegistrationView):
|
|||||||
}
|
}
|
||||||
redirect_url = 'done'
|
redirect_url = 'done'
|
||||||
|
|
||||||
def register(self, form: CustomRegistrationForm) -> Optional[User]:
|
def register(self, form: CustomRegistrationForm) -> Optional[get_user_model()]:
|
||||||
"""
|
"""
|
||||||
Функция регистрации пользователя.
|
Функция регистрации пользователя.
|
||||||
1. Ввод email пользователя, указанный на Zendesk
|
1. Ввод email пользователя, указанный на Zendesk
|
||||||
@ -128,7 +129,7 @@ class CustomRegistrationView(RegistrationView):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def set_permission(user: User) -> None:
|
def set_permission(user: get_user_model()) -> None:
|
||||||
"""
|
"""
|
||||||
Функция дает разрешение на просмотр страница администратора, если пользователь имеет роль admin.
|
Функция дает разрешение на просмотр страница администратора, если пользователь имеет роль admin.
|
||||||
|
|
||||||
@ -142,7 +143,7 @@ class CustomRegistrationView(RegistrationView):
|
|||||||
)
|
)
|
||||||
user.user_permissions.add(permission)
|
user.user_permissions.add(permission)
|
||||||
|
|
||||||
def get_success_url(self, user: User = None) -> Dict:
|
def get_success_url(self, user: get_user_model() = None) -> Dict:
|
||||||
"""
|
"""
|
||||||
Функция возвращает url-адрес страницы, куда нужно перейти после успешной/не успешной регистрации.
|
Функция возвращает url-адрес страницы, куда нужно перейти после успешной/не успешной регистрации.
|
||||||
Используется самой django-registration.
|
Используется самой django-registration.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user