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 = `
Пользователь не состоит ни в одной группе