Note di lavoro dopo l’analisi tramite l’API Admin e il codice del kernel di Discourse (ramo Cursor nel repository hoee).
Oggetto
Sull’istanza, la card amministrativa: /admin/users/-4/chatbot (Chatbot nell’amministrazione).
Cosa restituisce il JSON amministrativo (copia di verifica)
id: -4 (questo è un bot secondo le regole del kernel:user_id > 0solo per gli utenti «vivi»)username: Chatbotadmin: truemoderator: falsepost_count: 0can_be_deleted: falsecan_be_anonymized: false
Perché can_be_deleted: false anche con 0 post
Nel metodo Guardian#can_delete_user? l’eliminazione è proibita se l’utente target è admin. Questo non è legato al numero di post nel nostro caso.
Perché manualmente tramite UI e HTTP amministrativo spesso «non funziona»
Per operazioni come revoke admin / destroy, sullo id negativo non passa Guardian#can_administer?: c’è una condizione che richiede che l’identificatore target sia positivo (obj.id.positive?). Quindi le richieste ai route member tipo «come per un normale username» restituiscono 404, mentre con il segmento -4 si ottiene un 403 invalid_access, anche quando l’attore API è staff.
Risultato: rimuovere l’admin e cancellare l’account tramite l’API amministrativa nello stesso UX usato per gli utenti normali, non è possibile — serve un altro percorso (sotto).
Percorso morbido senza cancellare la riga nel DB
Disattivare il modulo del bot AI nelle impostazioni del sito: parametro ai_bot_enabled (false — il comportamento del bot GPT e l’interfaccia correlata nel messaggio privato/testata viene spento; la riga dell’utente rimane comunque).
Sul sistema con checkout del repository hoee e file discourse.env aggiunto un helper:
scripts/discourse-ai-chatbot-operator.sh audit— dump rapido dei campi da/admin/users/-4/list.jsonai-bot-disable/ai-bot-enable— PUT suai_bot_enabled(chiavi system dadiscourse.env, non pubblicare)
Percorso duro: cancellare realmente l’utente
Solo sul server dell’applicazione Discourse, con un backup del DB prima delle modifiche: in console Rails rimuovere la flag admin dal record (ad esempio con update_columns), poi usare UserDestroyer da un admin vivo con id > 0 e delete_posts: true se necessario. Il blocco di testo da copiare: scripts/discourse-ai-chatbot-operator.sh rails-destroy-snippet.
Rischi: il plugin discourse-ai potrebbe ricreare i bot durante gli aggiornamenti; possono verificarsi messaggi di missing bot user finché il modulo non ripristina lo stato.
Link al codice upstream
- discourse/discourse
app/models/user.rb-human?/ id negativi - discourse/discourse
lib/guardian.rb-can_administer? - discourse/discourse
lib/guardian/user_guardian.rb-can_delete_user?
Se necessario, nelle risposte si può fornire una procedura separata per «verificare il valore attuale di ai_bot_enabled tramite Admin → Impostazioni → plugin discourse-ai» senza API.