From 70a6cbed84ee6c60d6c43a9a467eed4f90fab055 Mon Sep 17 00:00:00 2001 From: kalugin66 Date: Sun, 8 Feb 2026 23:36:52 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D1=8F=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api2-groups.js | 48 +++++++++++++++++++++ public/main.js | 112 +++++++++++++++++++++++++++++++++++++++++++++++++ server.js | 8 +++- 3 files changed, 167 insertions(+), 1 deletion(-) diff --git a/api2-groups.js b/api2-groups.js index e383e63..248b911 100644 --- a/api2-groups.js +++ b/api2-groups.js @@ -130,6 +130,54 @@ db.run(` description: 'Идентификаторы из других систем', service_type: 'other', is_active: true + }, + { + name: 'Секретарь', + description: 'согласование документов', + service_type: 'other', + is_active: true + }, + { + name: 'ИТ специалист', + description: 'ИТ специалисты', + service_type: 'other', + is_active: true + }, + { + name: 'АХЧ', + description: 'сотрудники АХЧ', + service_type: 'other', + is_active: true + }, + { + name: 'психолог', + description: 'сотрудники психологи', + service_type: 'other', + is_active: true + }, + { + name: 'логопед', + description: 'сотрудники логопеды', + service_type: 'other', + is_active: true + }, + { + name: 'кадровичка', + description: 'сотрудники кадровой службы', + service_type: 'other', + is_active: true + }, + { + name: 'Администрация', + description: 'секретари и завучи', + service_type: 'other', + is_active: true + }, + { + name: 'Админ ЭЖ', + description: 'администраторы электронного журнала', + service_type: 'other', + is_active: true } ]; diff --git a/public/main.js b/public/main.js index 07e5d09..084bf28 100644 --- a/public/main.js +++ b/public/main.js @@ -143,6 +143,118 @@ async function createTask(event) { } } } + // Дополнительная проверка для задач типа "it" + if (taskType === 'it' && selectedUsers.length > 0) { + // Проверяем, что все выбранные пользователи - it + for (const userId of selectedUsers) { + const groups = await getUserGroups(userId); + const hasSecretaryGroup = groups.some(group => + group.name === 'IT поддержка' || + (typeof group === 'string' && group.includes('IT поддержка')) + ); + + if (!hasSecretaryGroup) { + alert('Для задачи можно выбирать только пользователей из группы "IT поддержка"'); + return; + } + } + } + // Дополнительная проверка для задач типа "ahch" + if (taskType === 'ahch' && selectedUsers.length > 0) { + // Проверяем, что все выбранные пользователи - it + for (const userId of selectedUsers) { + const groups = await getUserGroups(userId); + const hasSecretaryGroup = groups.some(group => + group.name === 'АХЧ' || + (typeof group === 'string' && group.includes('АХЧ')) + ); + + if (!hasSecretaryGroup) { + alert('Для задачи можно выбирать только пользователей из группы "сотрудники АХЧ"'); + return; + } + } + } + // Дополнительная проверка для задач типа "psychologist" + if (taskType === 'psychologist' && selectedUsers.length > 0) { + // Проверяем, что все выбранные пользователи - it + for (const userId of selectedUsers) { + const groups = await getUserGroups(userId); + const hasSecretaryGroup = groups.some(group => + group.name === 'психолог' || + (typeof group === 'string' && group.includes('психолог')) + ); + + if (!hasSecretaryGroup) { + alert('Для задачи можно выбирать только пользователей из группы "сотрудники психологи"'); + return; + } + } + } + // Дополнительная проверка для задач типа "speech_therapist" + if (taskType === 'speech_therapist' && selectedUsers.length > 0) { + // Проверяем, что все выбранные пользователи - speech_therapist + for (const userId of selectedUsers) { + const groups = await getUserGroups(userId); + const hasSecretaryGroup = groups.some(group => + group.name === 'логопед' || + (typeof group === 'string' && group.includes('логопед')) + ); + + if (!hasSecretaryGroup) { + alert('Для задачи можно выбирать только пользователей из группы "сотрудники логопеды"'); + return; + } + } + } + // Дополнительная проверка для задач типа "hr" + if (taskType === 'hr' && selectedUsers.length > 0) { + // Проверяем, что все выбранные пользователи - hr + for (const userId of selectedUsers) { + const groups = await getUserGroups(userId); + const hasSecretaryGroup = groups.some(group => + group.name === 'кадровичка' || + (typeof group === 'string' && group.includes('кадровичка')) + ); + + if (!hasSecretaryGroup) { + alert('Для задачи можно выбирать только пользователей из группы "сотрудники кадровой службы"'); + return; + } + } + } + // Дополнительная проверка для задач типа "certificate" + if (taskType === 'certificate' && selectedUsers.length > 0) { + // Проверяем, что все выбранные пользователи - certificate + for (const userId of selectedUsers) { + const groups = await getUserGroups(userId); + const hasSecretaryGroup = groups.some(group => + group.name === 'Администрация' || + (typeof group === 'string' && group.includes('Администрация')) + ); + + if (!hasSecretaryGroup) { + alert('Для задачи можно выбирать только пользователей из группы "секретари и завучи"'); + return; + } + } + } + // Дополнительная проверка для задач типа "e_journal" + if (taskType === 'e_journal' && selectedUsers.length > 0) { + // Проверяем, что все выбранные пользователи - e_journal + for (const userId of selectedUsers) { + const groups = await getUserGroups(userId); + const hasSecretaryGroup = groups.some(group => + group.name === 'Админ ЭЖ' || + (typeof group === 'string' && group.includes('Админ ЭЖ')) + ); + + if (!hasSecretaryGroup) { + alert('Для задачи можно выбирать только пользователей из группы "администраторы электронного журнала"'); + return; + } + } + } const formData = new FormData(); formData.append('title', title); formData.append('description', description); diff --git a/server.js b/server.js index 8e61faf..3e9e1ac 100644 --- a/server.js +++ b/server.js @@ -729,9 +729,15 @@ app.get('/doc', (req, res) => { if (!req.session.user) { return res.redirect('/'); } - if (!req.session.user || req.session.user.role !== 'admin') { + const { role, name } = req.session.user; + const hasAccess = role === 'admin' || role === 'tasks'; + + if (!hasAccess) { return res.status(403).send('в разработке'); } + //if (!req.session.user || req.session.user.role !== 'admin') { + // return res.status(403).send('в разработке'); + //} res.sendFile(path.join(__dirname, 'public/doc.html')); }); // Страница поддержка