Changeset 98ecf51 in Klonkt for src/routes
- Timestamp:
- 06/18/2026 03:19:09 AM (3 months ago)
- Branches:
- main
- Children:
- 7881080
- Parents:
- 6a2abb1
- File:
-
- 1 edited
-
src/routes/admin-sites.js (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/admin-sites.js
r6a2abb1 r98ecf51 137 137 } 138 138 139 /** Geldige user-id voor owner-toewijzing, of null bij leeg/onbekend. */ 140 function validOwnerId(raw) { 141 const id = (raw || '').toString().trim(); 142 if (!id) return null; 143 return db.prepare('SELECT 1 FROM users WHERE id = ?').get(id) ? id : null; 144 } 145 146 /** Geef een user admin-rechten op een site (idempotent upsert). */ 147 function grantSiteAdmin(siteId, userId) { 148 db.prepare(` 149 INSERT INTO site_members (site_id, user_id, role) VALUES (?, ?, 'admin') 150 ON CONFLICT(site_id, user_id) DO UPDATE SET role = 'admin' 151 `).run(siteId, userId); 152 } 153 154 /** Kandidaat-owners voor het owner-keuzeveld (god-only). */ 155 function listOwnerCandidates() { 156 return db.prepare('SELECT id, username, role FROM users ORDER BY username').all(); 157 } 158 139 159 // ==================== LIST ==================== 140 160 router.get('/', requireGod, (req, res) => { … … 163 183 bodyClass: 'on-admin', 164 184 isNew: true, 165 site: { slug: '', ...siteEditableFields() }, 185 site: { slug: '', owner_id: req.session.user.id, ...siteEditableFields() }, 186 users: listOwnerCandidates(), 166 187 palettes: ThemeService.listPalettes(), 167 188 accents: ThemeService.listAccents(), … … 187 208 188 209 const f = { ...siteEditableFields(), ...req.body }; 210 211 // Owner: god mag de site aan een ANDERE gebruiker toewijzen — dit is de kern 212 // van hub-modus (elke gebruiker z'n eigen, zelf te beheren Klonkt). Leeg of 213 // ongeldig → de aanmakende god zelf. 214 const ownerId = validOwnerId(req.body.owner_id) || req.session.user.id; 215 189 216 const siteId = uuid(); 190 217 db.prepare(` … … 200 227 (f.description || '').slice(0, 500), 201 228 (f.tagline || '').slice(0, 200), 202 req.session.user.id,229 ownerId, 203 230 f.language || 'nl', 204 231 f.palette || 'sage', … … 213 240 ); 214 241 215 // The site_members entry lets the god/owner show up in canAdminSite checks. 216 db.prepare(` 217 INSERT INTO site_members (site_id, user_id, role) VALUES (?, ?, 'admin') 218 `).run(siteId, req.session.user.id); 219 220 res.redirect(`/admin/sites/${slug}/edit?success=` + encodeURIComponent('Site created')); 242 // De OWNER (niet per se de aanmaker) krijgt een site_members-admin-rij → zo komt 243 // 'ie door canAdminSite + de requireSiteManager-gates en beheert 'ie z'n site. 244 grantSiteAdmin(siteId, ownerId); 245 246 res.redirect(`/admin/sites/${slug}/edit?success=` + encodeURIComponent('Site aangemaakt')); 221 247 }); 222 248 … … 236 262 isNew: false, 237 263 site, 264 users: listOwnerCandidates(), 238 265 palettes: ThemeService.listPalettes(), 239 266 accents: ThemeService.listAccents(), … … 314 341 ); 315 342 316 res.redirect(`/admin/sites/${req.params.slug}/edit?success=` + encodeURIComponent('Saved')); 343 // Owner (her)toewijzen — ALLEEN god. Een site-owner die z'n eigen site bewerkt 344 // kan de eigenaar niet wijzigen (het veld wordt voor niet-god ook niet getoond). 345 if (req.session.user.role === 'god') { 346 const newOwner = validOwnerId(req.body.owner_id); 347 if (newOwner) { 348 db.prepare('UPDATE sites SET owner_id = ? WHERE id = ?').run(newOwner, site.id); 349 grantSiteAdmin(site.id, newOwner); 350 } 351 } 352 353 res.redirect(`/admin/sites/${req.params.slug}/edit?success=` + encodeURIComponent('Opgeslagen')); 317 354 }); 318 355
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)