/// // Fahrer bekommen ein optionales Benutzerkonto, und die Fahrerverwaltung wird // zur Sache der Teamleitung. // // 1) riders.user — Verknüpfung eines Fahrers mit einem Login. Optional, weil // die meisten Fahrer nur in Ergebnislisten auftauchen und sich nie // anmelden. cascadeDelete ist bewusst aus: Wird ein Konto gelöscht, soll // der Fahrer samt seiner Zeiten erhalten bleiben. // // 2) riders create/update/delete nur noch für Owner und Admins. Bisher durfte // jedes Teammitglied Fahrer anlegen, ändern und löschen — mit den Zeiten // daran ist das zu viel Vertrauen in jeden Mitfahrer. Lesen bleibt für das // ganze Team offen. // // 3) users.viewRule von "nur ich selbst" auf "eingeloggt" gelockert. Ohne das // lässt sich zu einer bekannten User-ID kein Name anzeigen — betrifft die // Mitgliederliste eines Teams, den Melder eines Trail-Markers und die // Kontoverknüpfung eines Fahrers. Die listRule bleibt eng: Wer keine ID // kennt, kann auch keine Konten durchblättern. E-Mail-Adressen bleiben // über emailVisibility verborgen. // // 4) users.createRule von "niemand" auf "eingeloggt". Damit kann ein Admin // einem Fahrer direkt ein Login anlegen. Bewusst nicht offen (""), sonst // wäre es eine öffentliche Registrierung. const RIDERS_ADMIN_RULE = 'team.owner.id ?= @request.auth.id || team.admins.id ?= @request.auth.id' const RIDERS_MEMBER_RULE = 'team.users.id ?= @request.auth.id' const LOGGED_IN = '@request.auth.id != ""' migrate((app) => { const users = app.findCollectionByNameOrId('users') const riders = app.findCollectionByNameOrId('riders') // Der Snapshot in 1754400000_init_schema.js führt das Feld inzwischen // mit. Auf einer frischen Datenbank ist es also schon da, auf einer // bestehenden noch nicht — dieselbe Lage wie bei den trail-Collections. if (!riders.fields.getByName('user')) { riders.fields.add(new Field({ id: 'relation_rider_user', name: 'user', type: 'relation', collectionId: users.id, cascadeDelete: false, maxSelect: 1, minSelect: 0, required: false, })) } riders.createRule = RIDERS_ADMIN_RULE riders.updateRule = RIDERS_ADMIN_RULE riders.deleteRule = RIDERS_ADMIN_RULE app.save(riders) users.viewRule = LOGGED_IN users.createRule = LOGGED_IN app.save(users) }, (app) => { const users = app.findCollectionByNameOrId('users') const riders = app.findCollectionByNameOrId('riders') riders.fields.removeByName('user') riders.createRule = RIDERS_MEMBER_RULE riders.updateRule = RIDERS_MEMBER_RULE riders.deleteRule = RIDERS_MEMBER_RULE app.save(riders) users.viewRule = 'id = @request.auth.id' users.createRule = null app.save(users) })