/api/user
This commit is contained in:
42
server.js
42
server.js
@@ -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}`);
|
||||
|
||||
Reference in New Issue
Block a user