async function getUserGroups(userId) { try { const response = await fetch(`/api2/idusers/user/${userId}/groups`); if (!response.ok) throw new Error('Ошибка получения групп пользователя'); const groups = await response.json(); return groups; } catch (error) { console.error('Ошибка получения групп пользователя:', error); return []; } } // Получаем ID текущего пользователя и загружаем его группы async function loadCurrentUserGroups() { try { // Получаем информацию о текущем пользователе const userResponse = await fetch('/api/user'); if (!userResponse.ok) { console.error('Ошибка получения информации о пользователе'); return []; } const userData = await userResponse.json(); if (!userData.user) { console.error('Пользователь не аутентифицирован'); return []; } const currentUserId = userData.user.id; console.log('Текущий пользователь:', userData.user); // Получаем группы текущего пользователя const groups = await getUserGroups(currentUserId); console.log('Группы текущего пользователя:', groups); // Преобразуем массив строк в массив объектов const groupsAsObjects = groups.map(groupName => ({ name: groupName, description: '', service_type: 'ldap' // Предполагаем LDAP, так как группы из LDAP })); console.log('Группы как объекты:', groupsAsObjects); // Создаем плавающую кнопку если нужно createAdminFloatingButton(groupsAsObjects); return groupsAsObjects; } catch (error) { console.error('Ошибка загрузки групп текущего пользователя:', error); return []; } } // Инициализация при загрузке страницы document.addEventListener('DOMContentLoaded', function() { // Проверяем авторизацию и загружаем группы checkAuthAndLoadGroups(); }); // Функция проверки авторизации и загрузки групп async function checkAuthAndLoadGroups() { try { const response = await fetch('/api/user'); if (!response.ok) { console.log('Пользователь не аутентифицирован'); return; } const data = await response.json(); if (data.user) { // Загружаем группы текущего пользователя loadCurrentUserGroups(); } } catch (error) { console.error('Ошибка проверки авторизации:', error); } } // Создание плавающей кнопки администрации function createAdminFloatingButton(groups) { // Проверяем, есть ли у пользователя группа "LDAP - Администрация" const hasAdminGroup = groups.some(group => { if (!group || typeof group !== 'object') { console.warn('Некорректный формат группы:', group); return false; } return group.name === 'LDAP - Администрация' || (group.name && group.name.includes('Администрация')); }); console.log('Есть группа администрации:', hasAdminGroup); console.log('Все группы для проверки:', groups); if (!hasAdminGroup) return; // Удаляем старую кнопку если существует const existingButton = document.getElementById('adminFloatingButton'); if (existingButton) existingButton.remove(); // Создаем плавающую кнопку const button = document.createElement('button'); button.id = 'adminFloatingButton'; button.className = 'admin-floating-button'; button.innerHTML = ` Администрация `; // Добавляем обработчик клика button.addEventListener('click', () => { showAdminGroupsModal(groups); }); // Добавляем кнопку в body document.body.appendChild(button); console.log('Плавающая кнопка создана'); } // Функция для отображения модального окна с группами function showAdminGroupsModal(groups) { // Удаляем старое модальное окно если существует const existingModal = document.getElementById('adminGroupsModal'); if (existingModal) existingModal.remove(); // Создаем модальное окно const modal = document.createElement('div'); modal.id = 'adminGroupsModal'; modal.className = 'admin-modal'; // Формируем содержимое let groupsHTML = ''; if (groups.length === 0) { groupsHTML = `

Пользователь не состоит ни в одной группе

`; } else { groupsHTML = '
'; groups.forEach(group => { const isAdminGroup = group.name.includes('Администрация'); groupsHTML += `
${group.name} ${isAdminGroup ? ' ' : ''}
${group.description || 'Нет описания'} ${getServiceTypeName(group.service_type)}
`; }); groupsHTML += '
'; } modal.innerHTML = `
Мои группы
${groupsHTML}
`; // Добавляем стиль для выделения группы администрации if (!document.querySelector('#admin-highlight-style')) { const highlightStyle = document.createElement('style'); highlightStyle.id = 'admin-highlight-style'; highlightStyle.textContent = ` .admin-highlight { border-left: 4px solid #667eea; background: linear-gradient(to right, #f8fafc, #f0f9ff) !important; } `; document.head.appendChild(highlightStyle); } // Добавляем модальное окно в body document.body.appendChild(modal); // Показываем модальное окно setTimeout(() => { modal.classList.add('active'); }, 10); // Закрытие по клику на фон modal.addEventListener('click', (e) => { if (e.target === modal) { closeAdminGroupsModal(); } }); // Закрытие по клавише Esc document.addEventListener('keydown', function closeOnEsc(e) { if (e.key === 'Escape') { closeAdminGroupsModal(); document.removeEventListener('keydown', closeOnEsc); } }); } // Функция для закрытия модального окна function closeAdminGroupsModal() { const modal = document.getElementById('adminGroupsModal'); if (modal) { modal.classList.remove('active'); setTimeout(() => { modal.remove(); }, 300); } } // Вспомогательная функция для получения имени типа сервиса function getServiceTypeName(type) { switch(type) { case 'sberbank': return 'Сбербанк'; case 'yandex': return 'Яндекс'; case 'ldap': return 'LDAP'; default: return 'Прочие'; } } // Тестовая функция для отладки (удалите в продакшене) async function testCurrentUserGroups() { try { const response = await fetch('/api/user'); if (response.ok) { const data = await response.json(); console.log('Текущий пользователь:', data.user); if (data.user) { const groups = await getUserGroups(data.user.id); console.log('Группы текущего пользователя:', groups); } } } catch (error) { console.error('Тестовая ошибка:', error); } } // Запускаем тест при загрузке (для отладки) // testCurrentUserGroups();