Come eliminare tutti i post di un amministratore

Voglio revocare i diritti di amministratore a un singolo profilo, ma non c’è alcun pulsante ‘revoca’. Altri account ‘Staff’ sul mio sito hanno questo pulsante.

Qualcuno ha idea del perché e di come risolvere il problema?

Sto solo verificando che tu non stia cercando di revocare l’accesso di amministratore dall’account con cui sei attualmente loggato?

No. È un altro account… l’ho chiamato ‘Newsbot’ ed è stato utilizzato per importare feed RSS.

Ora voglio eliminare quei post.

L’email di questo account è presente nel file app.yml come sviluppatore? O hai concesso le autorizzazioni da sviluppatore tramite la console?

Gli utenti elencati nel file di build .yml come DEVELOPERS non possono essere eliminati dall’interfaccia utente per motivi di sicurezza:

 ## TODO: Elenco di email separate da virgola che verranno rese amministratore e sviluppatore
  ## all'iscrizione iniziale, ad esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: `incredible_undeletables@myamazingdomain.com'

Dovrai rimuoverli dal file di build .yml e ricostruire.

In alternativa, ma non consigliato e non supportato (presumo), è possibile modificare lo stato di amministratore (booleano) nella tabella users per quell’utente impostandolo su FALSE, direttamente nel database. Nota: non l’ho mai fatto (non ho mai revocato, ma ho aggiunto moderatori in questo modo), ma fare cose del genere (manipolare direttamente il DB con elementi con cui non si è totalmente familiari) potrebbe avere conseguenze impreviste, quindi questo non è consigliato a meno che non si sia esaurite tutte le altre opzioni (e assicurati al 100% di avere un backup funzionante del DB prima di procedere!).

Controlla il tuo file .yml… il problema è molto probabilmente lì.

Questo utente non è elencato nel mio file .yml.

È così frustrante quando persino gli amministratori vengono bloccati dalle funzionalità di base di manutenzione del forum.

Allora, potresti provare qualcosa del genere direttamente nel DB:

update users set admin = false where username = 'user_name_of_rouge_user';

dove:

  • ‘user_name_of_rouge_user’ è una stringa.

e:

  • false è un valore booleano

Questo è ciò che farei se avessi un utente “rouge” con privilegi di amministratore e dovessi revocarli senza poterlo fare dal pannello di amministrazione.

Un’ipotesi azzardata: hai forse personalizzato Discobot e rinominato in Newsbot? Il bot è considerato un utente di sistema e non è possibile revocargli lo stato di amministratore.

Puoi verificare se Newsbot è effettivamente Discobot andando alla sua pagina del profilo e controllando la sua email:

L’email del bot verrà visualizzata come discobot_email.

Sì, è esattamente quello che abbiamo fatto. Questo profilo Discobot è stato utilizzato per importare feed RSS, che ora vogliamo rimuovere. Il profilo può rimanere, voglio solo che tutti i post/argomenti vengano eliminati.

Non sono uno sviluppatore, quindi vi sarei molto grato se poteste fornire istruzioni semplici.

OK, quindi in realtà non ti interessa lo stato di amministratore qui. Il tuo obiettivo è la rimozione dei post? Un suggerimento per il futuro: facci sapere qual è il tuo obiettivo finale, non il passo attuale che pensi ti aiuti a raggiungerlo.

Non credo che esista un rake task per eliminare tutti i post di un utente specifico. Fammi provare alcune cose, ti farò sapere.

OK. Quanto segue ti consentirà di eliminare tutti i post di un utente. Avrai bisogno di accesso al server.

  1. Connettiti via SSH al server su cui è in esecuzione Discourse.
  2. Accedi alla console di Rails della tua istanza di Discourse.
    cd /var/www/discourse
    sudo ./launcher enter app
    rails c
    
  3. Ottieni l’ID dell’utente che desideri eliminare, quindi distruggi tutti i post di quell’utente. Questo presuppone che il nome utente sia newsbot; se non lo è, assicurati di modificare il comando,
    id = User.find_by_username('newsbot').id
    Post.where(user_id: id).each do |p|
      PostDestroyer.new(Discourse.system_user, p).destroy  
    end;