Die Rolle superadmin kommt als Feld an users, der erste ist stammtisch@dne.name. Vergeben wird sie nur in PocketBase: Die updateRule schliesst das Feld ueber @request.body.superadmin:isset = false aus, sonst koennte sich jeder selbst befoerdern - jeder darf schliesslich seinen eigenen Datensatz aendern. Besondere Rechte in der App haengen noch nicht daran. Flag-Typen bleiben ausdruecklich Sache der Teams. Ein neues Team bekommt beim Anlegen den hartkodierten Standardsatz aus der App und kann ihn danach frei aendern; eine appweite Verwaltung entfaellt damit. Ein Team ohne Flag-Typen koennte zwar Marker aufnehmen, aber nichts einordnen. Im Kopf stehen Avatar und Name links, Design-Umschalter und Logout rechts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014dh9W1i7aLSdPYJzQPid5o
47 lines
1.6 KiB
JavaScript
47 lines
1.6 KiB
JavaScript
/// <reference path="../pb_data/types.d.ts" />
|
|
|
|
// Superadmin als appweite Rolle, über allen Teams.
|
|
//
|
|
// Wichtig ist die Ergänzung der updateRule: Jeder darf seinen eigenen
|
|
// Datensatz ändern — ohne `@request.body.superadmin:isset = false` könnte
|
|
// sich damit jeder selbst befördern. Vergeben wird die Rolle deshalb nur
|
|
// direkt in PocketBase oder durch eine Migration wie diese.
|
|
//
|
|
// Der erste Superadmin ist stammtisch@dne.name. Existiert das Konto (noch)
|
|
// nicht, passiert hier nichts weiter — die Rolle lässt sich jederzeit im
|
|
// Admin-UI nachziehen.
|
|
//
|
|
// Flag-Typen bleiben ausdrücklich Sache der Teams: Jedes Team verwaltet
|
|
// seine eigenen und bekommt beim Anlegen den Standardsatz aus der App.
|
|
// Superadmin hat damit im Alltag nichts zu tun.
|
|
|
|
const FIRST_SUPERADMIN = 'stammtisch@dne.name'
|
|
|
|
migrate((app) => {
|
|
const users = app.findCollectionByNameOrId('users')
|
|
|
|
if (!users.fields.getByName('superadmin')) {
|
|
users.fields.add(new Field({
|
|
id: 'bool_user_superadmin',
|
|
name: 'superadmin',
|
|
type: 'bool',
|
|
}))
|
|
}
|
|
|
|
users.updateRule = 'id = @request.auth.id && @request.body.superadmin:isset = false'
|
|
app.save(users)
|
|
|
|
try {
|
|
const first = app.findAuthRecordByEmail('users', FIRST_SUPERADMIN)
|
|
first.set('superadmin', true)
|
|
app.save(first)
|
|
} catch {
|
|
// Konto noch nicht angelegt — die Rolle wird dann von Hand vergeben.
|
|
}
|
|
}, (app) => {
|
|
const users = app.findCollectionByNameOrId('users')
|
|
|
|
users.fields.removeByName('superadmin')
|
|
users.updateRule = 'id = @request.auth.id'
|
|
app.save(users)
|
|
})
|