users
This commit is contained in:
122
public/users.js
122
public/users.js
@@ -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');
|
||||||
|
|||||||
Reference in New Issue
Block a user