цвета

This commit is contained in:
2026-01-29 17:08:15 +05:00
parent 48394cd0cd
commit 827eeb59b9
12 changed files with 1992 additions and 467 deletions

View File

@@ -263,7 +263,92 @@ app.get('/api/user', (req, res) => {
res.status(401).json({ error: 'Не аутентифицирован' });
}
});
// Получаем актуальные группы пользователя из новой структуры
app.get('/api/user_v2', (req, res) => {
if (req.session.user) {
db.all(`
SELECT g.name
FROM user_groups g
JOIN user_group_memberships ugm ON g.id = ugm.group_id
WHERE ugm.user_id = ?
`, [req.session.user.id], (err, rows) => {
if (err) {
console.error('❌ Ошибка получения групп пользователя:', err);
return res.json({ user: req.session.user });
}
const userGroups = rows.map(row => row.name);
// Обновляем группы в сессии
req.session.user.groups = userGroups;
// Обновляем поле groups в старой таблице для совместимости
db.run(
"UPDATE users SET groups = ?, updated_at = datetime('now') WHERE id = ?",
[JSON.stringify(userGroups), req.session.user.id]
);
// Проверяем права администратора
const allowedGroups = process.env.ALLOWED_GROUPS ?
process.env.ALLOWED_GROUPS.split(',').map(g => g.trim()) : [];
const isAdmin = userGroups.some(group => allowedGroups.includes(group));
const actualRole = isAdmin ? 'admin' : 'teacher';
if (req.session.user.role !== actualRole) {
console.log(`Обновлена роль пользователя ${req.session.user.login} с ${req.session.user.role} на ${actualRole}`);
db.run(
"UPDATE users SET role = ?, updated_at = datetime('now') WHERE id = ?",
[actualRole, req.session.user.id]
);
req.session.user.role = actualRole;
}
res.json({ user: req.session.user });
});
} else {
res.status(401).json({ error: 'Не аутентифицирован' });
}
});
// API для получения пользователей группы "help"
app.get('/api/users/group/help', requireAuth, (req, res) => {
db.all(`
SELECT u.id, u.login, u.name, u.email, u.role, u.auth_type
FROM users u
JOIN user_group_memberships ugm ON u.id = ugm.user_id
JOIN user_groups g ON ugm.group_id = g.id
WHERE g.name = 'help'
ORDER BY u.name
`, [], (err, rows) => {
if (err) {
console.error('❌ Ошибка получения пользователей группы help:', err);
res.status(500).json({ error: err.message });
return;
}
res.json(rows);
});
});
// API для получения пользователей группы "doc"
app.get('/api/users/group/doc', requireAuth, (req, res) => {
db.all(`
SELECT u.id, u.login, u.name, u.email, u.role, u.auth_type
FROM users u
JOIN user_group_memberships ugm ON u.id = ugm.user_id
JOIN user_groups g ON ugm.group_id = g.id
WHERE g.name = 'doc'
ORDER BY u.name
`, [], (err, rows) => {
if (err) {
console.error('❌ Ошибка получения пользователей группы doc:', err);
res.status(500).json({ error: err.message });
return;
}
res.json(rows);
});
});
// Middleware для проверки наличия БД в API endpoints
app.use((req, res, next) => {
if (!db && req.path.startsWith('/api/') && req.path !== '/api/health' && req.path !== '/api/login') {