/api/user

This commit is contained in:
2026-02-01 22:03:01 +05:00
parent f0da850116
commit 3937377f94
2 changed files with 81 additions and 16 deletions

View File

@@ -230,18 +230,48 @@ app.get('/api/user', (req, res) => {
return res.status(401).json({ error: 'Пользователь не найден' });
}
let groups = [];
let userGroups = [];
try {
groups = JSON.parse(user.groups || '[]');
userGroups = JSON.parse(user.groups || '[]');
} catch (e) {
groups = [];
userGroups = [];
}
// Получаем все группы из .env
const allowedGroups = process.env.ALLOWED_GROUPS ?
process.env.ALLOWED_GROUPS.split(',').map(g => g.trim()) : [];
const isAdmin = groups.some(group => allowedGroups.includes(group));
const actualRole = isAdmin ? 'admin' : 'teacher';
const secretaryGroups = process.env.SECRETARY_GROUPS ?
process.env.SECRETARY_GROUPS.split(',').map(g => g.trim()) : [];
const helpGroups = process.env.HELP_GROUPS ?
process.env.HELP_GROUPS.split(',').map(g => g.trim()) : [];
const itHelpGroups = process.env.ITHELP_GROUPS ?
process.env.ITHELP_GROUPS.split(',').map(g => g.trim()) : [];
const requestGroups = process.env.REQUEST_GROUPS ?
process.env.REQUEST_GROUPS.split(',').map(g => g.trim()) : [];
const tasksGroups = process.env.TASKS_GROUPS ?
process.env.TASKS_GROUPS.split(',').map(g => g.trim()) : [];
// Определяем роль пользователя на основе групп
// ВСЕ пользователи являются 'teacher' по умолчанию
let actualRole = 'teacher';
if (userGroups && userGroups.length > 0) {
// Определяем наивысшую роль
// Порядок приоритета: admin > secretary > help > ithelp > request > tasks
if (userGroups.some(group => allowedGroups.includes(group))) {
actualRole = 'admin';
} else if (userGroups.some(group => secretaryGroups.includes(group))) {
actualRole = 'secretary';
} else if (userGroups.some(group => helpGroups.includes(group))) {
actualRole = 'help';
} else if (userGroups.some(group => itHelpGroups.includes(group))) {
actualRole = 'ithelp';
} else if (userGroups.some(group => requestGroups.includes(group))) {
actualRole = 'request';
} else if (userGroups.some(group => tasksGroups.includes(group))) {
actualRole = 'tasks';
}
// Если ни одна группа не совпала, остается 'teacher'
}
if (req.session.user.role !== actualRole) {
console.log(`Обновлена роль пользователя ${req.session.user.login} с ${req.session.user.role} на ${actualRole}`);