Changeset a64f642 in Klonkt for src/routes/admin-users.js


Ignore:
Timestamp:
06/14/2026 04:28:57 PM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
ab544fd
Parents:
640b39c
Message:

admin: read-only ("View mode") configurable per user in Admin -> Users

Toggle in the user list (POST /admin/users/:id/readonly, god-only, not on
yourself). Sets users.readonly on/off so an account can view everything but
cannot modify anything.

Co-Authored-By: Claude <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/admin-users.js

    r640b39c ra64f642  
    2929router.get('/', requireGod, (req, res) => {
    3030  const users = db.prepare(`
    31     SELECT u.id, u.username, u.email, u.role, u.created_at, u.avatar_url,
     31    SELECT u.id, u.username, u.email, u.role, u.created_at, u.avatar_url, u.readonly,
    3232           (SELECT COUNT(*) FROM posts p WHERE p.author_id = u.id) AS post_count,
    3333           (SELECT COUNT(*) FROM sites s  WHERE s.owner_id  = u.id) AS site_count
     
    7171});
    7272
     73// ==================== READ-ONLY (kijk-account) ====================
     74router.post('/:id/readonly', requireGod, (req, res) => {
     75  const target = db.prepare('SELECT id FROM users WHERE id = ?').get(req.params.id);
     76  if (!target) return res.redirect('/admin/users?error=User+not+found');
     77  // Niet op jezelf — voorkomt dat een god zichzelf alleen-lezen maakt en vastloopt.
     78  if (target.id === req.session.user.id) {
     79    return res.redirect('/admin/users?error=' + encodeURIComponent('Kan jezelf niet op alleen-lezen zetten'));
     80  }
     81  const ro = req.body.readonly === '1' ? 1 : 0;
     82  db.prepare('UPDATE users SET readonly = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?')
     83    .run(ro, req.params.id);
     84  res.redirect('/admin/users?success=' + encodeURIComponent(ro ? 'Kijk-modus aan' : 'Kijk-modus uit'));
     85});
     86
    7387// ==================== DELETE ====================
    7488router.post('/:id/delete', requireGod, (req, res) => {
Note: See TracChangeset for help on using the changeset viewer.