цвета
This commit is contained in:
85
server.js
85
server.js
@@ -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') {
|
||||
|
||||
Reference in New Issue
Block a user