Changeset 8cb1dc7 in Klonkt for src/routes/admin-comments.js


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

hub: artist self-management — owner manages their own subsite (posts/appearance/comments)

A site owner (member) now gets a "My PrutFolio" dashboard and can manage their
OWN site; cross-site access is restricted.

  • auth.js: requireSiteManager (owner of res.locals.site or god) + requireSiteManagerBySlug (owner of :slug or god).
  • admin.js: /admin role-aware -> god=hub management, owner=my-site dashboard, member without site=403.
  • admin-sites.js: /:slug/edit + /save owner-or-god (was god-only); upload-photo requireAuth. list/new/create/delete remain god-only.
  • admin-comments.js: requireSiteManager + redirects/form actions via siteUrlBase so the artist context (/user/<slug>/admin/comments) is correct.
  • render.js: userOwnsSite flag; topnav + overview show "Admin" for owners; topnav "New post" uses siteUrlBase.
  • pages/my-site.ejs: artist dashboard.

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

File:
1 edited

Legend:

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

    rccbd6a6 r8cb1dc7  
    1515import db from '../config/database.js';
    1616import { renderPage } from '../middleware/render.js';
    17 import { requireGod } from '../middleware/auth.js';
     17import { requireSiteManager } from '../middleware/auth.js';
    1818
    1919const router = express.Router();
    2020
    21 router.get('/', requireGod, (req, res) => {
     21router.get('/', requireSiteManager, (req, res) => {
    2222  const site = res.locals.site;
    2323  if (!site) return res.status(404).send('No site');
     
    6161  const site = res.locals.site;
    6262  if (!site) return res.status(404).send('No site');
     63  const base = res.locals.siteUrlBase || ''; // /user/<slug> in hub-artiestcontext, anders ''
    6364
    6465  const row = db.prepare(`
     
    6768  `).get(req.params.id, site.id);
    6869
    69   if (!row) return res.redirect('/admin/comments?error=Not+found');
     70  if (!row) return res.redirect(base + '/admin/comments?error=Not+found');
    7071
    7172  db.prepare(
    7273    'UPDATE comments SET status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?'
    7374  ).run(status, req.params.id);
    74   res.redirect('/admin/comments?success=' + encodeURIComponent('Comment ' + status));
     75  res.redirect(base + '/admin/comments?success=' + encodeURIComponent('Comment ' + status));
    7576}
    7677
    77 router.post('/:id/approve', requireGod, (req, res) => setStatus(req, res, 'approved'));
    78 router.post('/:id/reject',  requireGod, (req, res) => setStatus(req, res, 'rejected'));
     78router.post('/:id/approve', requireSiteManager, (req, res) => setStatus(req, res, 'approved'));
     79router.post('/:id/reject',  requireSiteManager, (req, res) => setStatus(req, res, 'rejected'));
    7980
    8081export default router;
Note: See TracChangeset for help on using the changeset viewer.