/// // // Equivalente del trigger enforce_giocatori_squadra_update (M1/M5/M8, DD-016/DD-018): // un non-admin può aggiornare uno slot di giocatori_squadra solo per reclamarlo (slot // libero, email dell'account uguale a quella registrata sulla riga), senza cambiare nessun // altro campo. La updateRule della collection apre la porta solo quando auth_user_id è // vuoto o l'utente è admin; qui si valida il resto. onRecordUpdateRequest((e) => { // Superuser (pbAdmin lato server, dashboard, script di migrazione dati) e admin // applicativi (role="admin" sulla collection users) bypassano il vincolo di claim. const isAdmin = e.hasSuperuserAuth() || (e.auth && e.auth.get("role") === "admin"); if (isAdmin) { e.next(); return; } const originale = e.app.findRecordById("giocatori_squadra", e.record.id); const campiBloccati = [ "nome", "cognome", "numero", "ruolo", "attivo", "email", "numero_tessera", "data_tessera", ]; for (const campo of campiBloccati) { if (String(e.record.get(campo)) !== String(originale.get(campo))) { throw new BadRequestError("Aggiornamento non autorizzato su giocatori_squadra"); } } const utenteId = e.auth ? e.auth.id : ""; const emailAccount = (e.auth ? e.auth.get("email") || "" : "").toLowerCase(); const emailSlot = (originale.get("email") || "").toLowerCase(); const slotLibero = !originale.get("auth_user_id"); const claimSuAccountCorrente = e.record.get("auth_user_id") === utenteId; const emailCombacia = emailSlot !== "" && emailSlot === emailAccount; if (!slotLibero || !claimSuAccountCorrente || !emailCombacia) { throw new BadRequestError("Aggiornamento non autorizzato su giocatori_squadra"); } e.next(); }, "giocatori_squadra");