/// // 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) })