This commit is contained in:
2026-02-01 23:55:35 +05:00
parent 7e3460c355
commit be9a2a0da0

View File

@@ -9,8 +9,12 @@ let copySelectedUsers = [];
async function loadUsers() { async function loadUsers() {
try { try {
const response = await fetch('/api/users'); const response = await fetch('/api/users');
users = await response.json(); const allUsersData = await response.json();
allUsers = users; //users = await response.json();
// Сохраняем всех пользователей
allUsers = allUsersData;
// Фильтруем пользователей в зависимости от прав текущего пользователя
users = filterAssignableUsers(allUsersData);
filteredUsers = [...users]; filteredUsers = [...users];
renderUsersChecklist(); renderUsersChecklist();
renderEditUsersChecklist(); renderEditUsersChecklist();
@@ -20,7 +24,121 @@ async function loadUsers() {
console.error('Ошибка загрузки пользователей:', 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() { function populateFilterDropdowns() {
const creatorFilter = document.getElementById('creator-filter'); const creatorFilter = document.getElementById('creator-filter');
const assigneeFilter = document.getElementById('assignee-filter'); const assigneeFilter = document.getElementById('assignee-filter');