Como excluir todas as postagens de um administrador

Quero revogar a função de administrador em um único perfil, mas não há um botão ‘revogar’. Outras contas de ‘Equipe’ no meu site têm um botão.

Alguma ideia do porquê e como corrigir, por favor?

Só confirmando: você não está tentando revogar o acesso de administrador da conta em que está atualmente logado, certo?

Não. É outra conta… Eu a chamei de ‘Newsbot’ e ela era usada para importar feeds RSS.

Agora quero remover essas postagens.

O e-mail desta conta existe no seu arquivo app.yml como desenvolvedor? Ou você concedeu permissões de desenvolvedor via console?

Usuários listados no arquivo de build .yml como DEVELOPERS não podem ser excluídos pela interface do usuário por motivos de segurança:

 ## TODO: Lista de e-mails separados por vírgula que serão feitos administradores e desenvolvedores
  ## no cadastro inicial, exemplo 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: `incredible_undeletables@myamazingdomain.com'

Você precisará removê-los do arquivo de build .yml e reconstruir.

Alternativamente, mas não recomendado e sem suporte (assumo), é alterar o status de administrador (booleano) na tabela users para aquele usuário para FALSE, diretamente no banco de dados. Nota: Eu nunca fiz isso (nunca revoguei, mas já adicionei moderadores dessa forma), mas fazer coisas assim ( mexer diretamente no BD com coisas com as quais você não está totalmente familiarizado) pode ter consequências não intencionais, então isso não é aconselhado a menos que tudo mais falhe (e certifique-se de ter um backup funcional do BD antes de fazer!).

Verifique seu arquivo .yml… o problema mais provavelmente está lá.

Este usuário não está listado no meu arquivo .yml.

É tão frustrante quando até mesmo administradores ficam bloqueados das funcionalidades básicas de manutenção do fórum.

Nesse caso, você pode tentar algo assim diretamente no banco de dados:

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

onde:

  • ‘user_name_of_rouge_user’ é uma string.

e:

  • false é um booleano

Isso é o que eu faria se tivesse um usuário problemático com privilégios de administrador e precisasse revogá-los, mas não conseguisse fazer isso no painel de administração.

Uma suposição ousada — você acabou de personalizar o Discobot e renomeá-lo para Newsbot? O bot é considerado um usuário do sistema, e você não pode revogar seu status de administrador.

Você pode verificar se o Newsbot é de fato o discobot acessando sua página de perfil e conferindo seu e-mail:

O e-mail do bot será exibido como discobot_email.

Sim, foi exatamente isso que fizemos. Este perfil do Discobot foi usado para importar feeds RSS, que agora queremos remover. O perfil pode permanecer; eu só quero que todas as postagens/tópicos sejam removidos.

Não sou desenvolvedor, então passos simples seriam muito apreciados, por favor.

OK, então você não está realmente falando sobre o status de administrador aqui. Seu objetivo é a remoção de posts? Sugestão para o futuro: informe qual é o seu objetivo final, não apenas a etapa atual que você acha que o ajudará a chegar lá.

Não acredito que exista uma tarefa rake para excluir todos os posts de um usuário específico. Deixe-me testar algumas coisas e eu volto para você.

OK. O seguinte permitirá que você exclua todos os posts de um usuário. Você precisará de acesso ao servidor.

  1. Acesse o servidor onde o Discourse está em execução via SSH.
  2. Acesse o console do Rails da sua instância do Discourse.
    cd /var/www/discourse
    sudo ./launcher enter app
    rails c
    
  3. Obtenha o ID do usuário que você deseja excluir e, em seguida, destrua todos os posts desse usuário. Isso assume que o nome de usuário é newsbot; se não for, certifique-se de editar o comando.
    id = User.find_by_username('newsbot').id
    Post.where(user_id: id).each do |p|
      PostDestroyer.new(Discourse.system_user, p).destroy  
    end;