// users.js - Управление пользователями let users = []; let allUsers = []; let filteredUsers = []; let selectedUsers = []; let editSelectedUsers = []; let copySelectedUsers = []; async function loadUsers() { try { const response = await fetch('/api/users'); const allUsersData = await response.json(); //users = await response.json(); // Сохраняем всех пользователей allUsers = allUsersData; // Фильтруем пользователей в зависимости от прав текущего пользователя users = filterAssignableUsers(allUsersData); filteredUsers = [...users]; renderUsersChecklist(); renderEditUsersChecklist(); renderCopyUsersChecklist(); populateFilterDropdowns(); } catch (error) { console.error('Ошибка загрузки пользователей:', error); } } function filterAssignableUsers(allUsers) { if (!currentUser) return []; // Администратор видит всех пользователей if (currentUser.role === 'admin') { return allUsers.filter(user => user.id !== currentUser.id); } if (currentUser.role === 'secretary') { return allUsers.filter(user => user.id !== currentUser.id); } if (currentUser.role === 'ithelp') { return allUsers.filter(user => (user.role === 'teacher' || user.role === 'tasks' || user.role === 'help' || user.role === 'request' || user.role === 'ithelp') && user.id !== currentUser.id ); } if (currentUser.role === 'request') { return allUsers.filter(user => (user.role === 'teacher' || user.role === 'tasks' || user.role === 'help' || user.role === 'request' || user.role === 'ithelp') && user.id !== currentUser.id ); } // tasks видит учителей и других tasks if (currentUser.role === 'help') { return allUsers.filter(user => (user.role === 'teacher' || user.role === 'tasks' || user.role === 'help' || user.role === 'request' || user.role === 'ithelp') && user.id !== currentUser.id ); } // tasks видит учителей и других tasks if (currentUser.role === 'tasks') { return allUsers.filter(user => (user.role === 'teacher' || user.role === 'tasks' || user.role === 'help' || user.role === 'request' || user.role === 'ithelp') && user.id !== currentUser.id ); } // Учитель видит только учителей if (currentUser.role === 'teacher') { return allUsers.filter(user => (user.role === 'teacher' || user.role === 'help' || user.role === 'request' || user.role === 'ithelp') && user.id !== currentUser.id ); } // Проверяем группы пользователя для определения прав const userGroups = currentUser.groups || []; // Загружаем конфигурацию групп из настроек // (предполагается, что эти переменные определены в глобальной области) const allowedGroups = getGroupsForCurrentUser(); // Если у пользователя нет специальных групп, возвращаем пустой массив if (allowedGroups.length === 0) { return []; } // Фильтруем пользователей по группам return allUsers.filter(user => { // Пользователь не может назначать задачи себе if (user.id === currentUser.id) return false; // Если у пользователя есть группы, проверяем пересечение if (user.groups && Array.isArray(user.groups)) { return user.groups.some(group => allowedGroups.includes(group)); } return false; }); } // Функция для получения групп, которым текущий пользователь может назначать задачи function getGroupsForCurrentUser() { const allowedGroups = []; const userGroups = currentUser.groups || []; // Определяем, какие группы доступны для назначения // На основе ролей и групп текущего пользователя // Пример: пользователи с ролью 'secretary' могут назначать задачи группам 'teachers' if (currentUser.role === 'secretary') { allowedGroups.push('teachers', 'staff'); } // Пример: пользователи из группы 'department_head' могут назначать своей группе if (userGroups.includes('department_head')) { allowedGroups.push('department_head', 'teachers'); } // Пример: для помощи (help) можно назначать всем if (currentUser.role === 'help') { // Можно указать конкретные группы или 'all' для всех allowedGroups.push('teachers', 'staff', 'administration'); } // Пример: для IT поддержки if (currentUser.role === 'ithelp') { allowedGroups.push('teachers', 'staff', 'administration', 'it_department'); } // Пример: пользователи с ролью 'request' могут создавать заявки для всех if (currentUser.role === 'request') { allowedGroups.push('all'); // Специальное значение "все" } // Пример: пользователи с ролью 'tasks' (задачи) могут назначать учителям if (currentUser.role === 'tasks') { allowedGroups.push('teachers'); } // Если массив содержит 'all', возвращаем специальный маркер if (allowedGroups.includes('all')) { return ['all']; // Это будет обрабатываться в фильтрации } return [...new Set(allowedGroups)]; // Убираем дубликаты } function populateFilterDropdowns() { const creatorFilter = document.getElementById('creator-filter'); const assigneeFilter = document.getElementById('assignee-filter'); creatorFilter.innerHTML = ''; assigneeFilter.innerHTML = ''; users.forEach(user => { const creatorOption = document.createElement('option'); creatorOption.value = user.id; creatorOption.textContent = `${user.name} (${user.login})`; creatorFilter.appendChild(creatorOption.cloneNode(true)); const assigneeOption = creatorOption.cloneNode(true); assigneeFilter.appendChild(assigneeOption); }); } function filterUsers() { const search = document.getElementById('user-search').value.toLowerCase(); filteredUsers = users.filter(user => user.name.toLowerCase().includes(search) || user.login.toLowerCase().includes(search) || user.email.toLowerCase().includes(search) ); renderUsersChecklist(); } function filterEditUsers() { const search = document.getElementById('edit-user-search').value.toLowerCase(); const filtered = users.filter(user => user.name.toLowerCase().includes(search) || user.login.toLowerCase().includes(search) || user.email.toLowerCase().includes(search) ); renderEditUsersChecklist(filtered); } function filterCopyUsers() { const search = document.getElementById('copy-user-search').value.toLowerCase(); const filtered = users.filter(user => user.name.toLowerCase().includes(search) || user.login.toLowerCase().includes(search) || user.email.toLowerCase().includes(search) ); renderCopyUsersChecklist(filtered); } function renderUsersChecklist() { const container = document.getElementById('users-checklist'); container.innerHTML = filteredUsers .filter(user => user.id !== currentUser.id) .map(user => `