Nachrichten: hidden User nur für Admins sichtbar

This commit is contained in:
2026-05-29 09:38:03 +02:00
parent c3047ac4d6
commit ff179a5d0d

View File

@@ -39,7 +39,25 @@ router.post('/keys', authenticate, (req, res) => {
// ── Users ───────────────────────────────────────────────────────────────────── // ── Users ─────────────────────────────────────────────────────────────────────
router.get('/users', authenticate, (req, res) => { router.get('/users', authenticate, (req, res) => {
const me = req.user.id; const me = req.user.id;
const isAdmin = req.user.role === 'admin';
// Admins sehen alle. Normale User sehen:
// - keine hidden User
// - wenn sie selbst hidden sind: nur Admins
const meUser = db.prepare('SELECT hidden FROM users WHERE id=?').get(me);
const isMeHidden = !!meUser?.hidden;
let whereExtra = '';
if (!isAdmin && isMeHidden) {
// Ich bin hidden → sehe nur Admins
whereExtra = "AND u.role = 'admin'";
} else if (!isAdmin) {
// Normaler User → sieht keine hidden User
whereExtra = "AND (u.hidden = 0 OR u.hidden IS NULL)";
}
// Admin → kein Filter
const users = db.prepare(` const users = db.prepare(`
SELECT u.id, u.username, uk.public_key, SELECT u.id, u.username, uk.public_key,
(SELECT COUNT(*) FROM messages (SELECT COUNT(*) FROM messages
@@ -49,7 +67,7 @@ router.get('/users', authenticate, (req, res) => {
OR (sender_id = ? AND recipient_id = u.id)) AS last_message_at OR (sender_id = ? AND recipient_id = u.id)) AS last_message_at
FROM users u FROM users u
LEFT JOIN user_keys uk ON uk.user_id = u.id LEFT JOIN user_keys uk ON uk.user_id = u.id
WHERE u.id != ? WHERE u.id != ? ${whereExtra}
ORDER BY last_message_at DESC, u.username ASC ORDER BY last_message_at DESC, u.username ASC
`).all(me, me, me, me); `).all(me, me, me, me);
res.json(users); res.json(users);