Обновления в user_roles: модели, сервисы, представления и миграции
This commit is contained in:
@@ -15,17 +15,23 @@ def user_role_list(request):
|
||||
"""Список пользователей с их ролями"""
|
||||
# Фильтр по активности
|
||||
show_inactive = request.GET.get('show_inactive', 'false') == 'true'
|
||||
|
||||
|
||||
# Базовый queryset - исключаем скрытые роли (platform_support)
|
||||
base_qs = UserRole.objects.select_related('user', 'role', 'created_by').exclude(
|
||||
role__code__in=Role.HIDDEN_ROLES
|
||||
)
|
||||
|
||||
if show_inactive:
|
||||
user_roles = UserRole.objects.select_related('user', 'role', 'created_by').all()
|
||||
user_roles = base_qs.all()
|
||||
else:
|
||||
# По умолчанию показываем только активных
|
||||
user_roles = UserRole.objects.select_related('user', 'role', 'created_by').filter(
|
||||
user_roles = base_qs.filter(
|
||||
is_active=True,
|
||||
user__is_active=True
|
||||
)
|
||||
|
||||
roles = Role.objects.all()
|
||||
|
||||
# Показываем только видимые роли (без platform_support)
|
||||
roles = RoleService.get_visible_roles()
|
||||
|
||||
context = {
|
||||
'user_roles': user_roles,
|
||||
@@ -69,7 +75,7 @@ def user_role_create(request):
|
||||
f'Пользователь с email {email} уже существует в системе.'
|
||||
)
|
||||
# ВАЖНО: Возвращаемся к форме, чтобы пользователь мог исправить email
|
||||
roles = Role.objects.all()
|
||||
roles = RoleService.get_visible_roles()
|
||||
context = {'roles': roles}
|
||||
return render(request, 'user_roles/user_role_create.html', context)
|
||||
else:
|
||||
@@ -100,7 +106,8 @@ def user_role_create(request):
|
||||
except Exception as e:
|
||||
messages.error(request, f'Ошибка при создании пользователя: {str(e)}')
|
||||
|
||||
roles = Role.objects.all()
|
||||
# Показываем только видимые роли (без platform_support)
|
||||
roles = RoleService.get_visible_roles()
|
||||
context = {
|
||||
'roles': roles,
|
||||
}
|
||||
@@ -113,6 +120,11 @@ def user_role_edit(request, pk):
|
||||
"""Изменение роли пользователя"""
|
||||
user_role = get_object_or_404(UserRole, pk=pk)
|
||||
|
||||
# Защита от редактирования скрытых ролей (platform_support)
|
||||
if user_role.role.code in Role.HIDDEN_ROLES:
|
||||
messages.error(request, 'Недостаточно прав для редактирования этого пользователя')
|
||||
return redirect('user_roles:list')
|
||||
|
||||
# Защита от самоблокировки
|
||||
can_modify, error_message = RoleService.can_modify_user_role(request.user, user_role)
|
||||
if not can_modify:
|
||||
@@ -130,9 +142,9 @@ def user_role_edit(request, pk):
|
||||
user_role.user.save()
|
||||
|
||||
messages.success(request, f'Пароль для пользователя {user_role.user.email} успешно обновлен')
|
||||
|
||||
|
||||
# Показываем новый пароль в модальном окне
|
||||
roles = Role.objects.all()
|
||||
roles = RoleService.get_visible_roles()
|
||||
context = {
|
||||
'user_role': user_role,
|
||||
'roles': roles,
|
||||
@@ -170,7 +182,7 @@ def user_role_edit(request, pk):
|
||||
except Exception as e:
|
||||
messages.error(request, f'Ошибка при обновлении данных: {str(e)}')
|
||||
|
||||
roles = Role.objects.all()
|
||||
roles = RoleService.get_visible_roles()
|
||||
context = {
|
||||
'user_role': user_role,
|
||||
'roles': roles,
|
||||
@@ -184,6 +196,11 @@ def user_role_delete(request, pk):
|
||||
"""Деактивация пользователя (soft delete)"""
|
||||
user_role = get_object_or_404(UserRole, pk=pk)
|
||||
|
||||
# Защита от удаления скрытых ролей (platform_support)
|
||||
if user_role.role.code in Role.HIDDEN_ROLES:
|
||||
messages.error(request, 'Недостаточно прав для удаления этого пользователя')
|
||||
return redirect('user_roles:list')
|
||||
|
||||
# Защита от самоблокировки
|
||||
can_modify, error_message = RoleService.can_modify_user_role(request.user, user_role)
|
||||
if not can_modify:
|
||||
@@ -215,6 +232,11 @@ def user_role_reactivate(request, pk):
|
||||
"""Реактивация пользователя"""
|
||||
user_role = get_object_or_404(UserRole, pk=pk)
|
||||
|
||||
# Защита от реактивации скрытых ролей (platform_support)
|
||||
if user_role.role.code in Role.HIDDEN_ROLES:
|
||||
messages.error(request, 'Недостаточно прав для изменения этого пользователя')
|
||||
return redirect('user_roles:list')
|
||||
|
||||
if request.method == 'POST':
|
||||
email = user_role.user.email
|
||||
|
||||
|
||||
Reference in New Issue
Block a user