Changeset 8cb1dc7 in Klonkt for src/routes/admin.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.js

    rccbd6a6 r8cb1dc7  
    88import db from '../config/database.js';
    99import { renderPage } from '../middleware/render.js';
    10 import { requireGod } from '../middleware/auth.js';
     10import { requireAuth } from '../middleware/auth.js';
    1111import { getTenancy } from '../services/SettingsService.js';
    1212
    1313const router = express.Router();
    1414
    15 router.get('/', requireGod, (req, res) => {
     15router.get('/', requireAuth, (req, res) => {
     16  const user = req.session.user;
     17
     18  // Niet-god: een artiest die een eigen site bezit krijgt een "Mijn PrutFolio"-
     19  // dashboard, gescopet op z'n eigen site. Bezit 'ie geen site -> geen beheer.
     20  if (user.role !== 'god') {
     21    const mySite = db.prepare(
     22      'SELECT * FROM sites WHERE owner_id = ? ORDER BY created_at ASC LIMIT 1'
     23    ).get(user.id);
     24    if (!mySite) return res.status(403).send('Geen beheer beschikbaar voor dit account.');
     25
     26    const mine = {
     27      posts: db.prepare("SELECT COUNT(*) AS c FROM posts WHERE site_id = ?").get(mySite.id).c,
     28      published: db.prepare("SELECT COUNT(*) AS c FROM posts WHERE site_id = ? AND status = 'published'").get(mySite.id).c,
     29    };
     30    return renderPage(req, res, 'pages/my-site', {
     31      pageTitle: 'Mijn PrutFolio',
     32      bodyClass: 'on-admin',
     33      mySite,
     34      mine,
     35    });
     36  }
     37
    1638  const tenancy = getTenancy();
    1739
Note: See TracChangeset for help on using the changeset viewer.