diff --git a/public/users.js b/public/users.js index 1c51d78..e0535a7 100644 --- a/public/users.js +++ b/public/users.js @@ -9,8 +9,12 @@ let copySelectedUsers = []; async function loadUsers() { try { const response = await fetch('/api/users'); - users = await response.json(); - allUsers = users; + const allUsersData = await response.json(); + //users = await response.json(); + // Сохраняем всех пользователей + allUsers = allUsersData; + // Фильтруем пользователей в зависимости от прав текущего пользователя + users = filterAssignableUsers(allUsersData); filteredUsers = [...users]; renderUsersChecklist(); renderEditUsersChecklist(); @@ -20,7 +24,121 @@ async function loadUsers() { 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');