Как удалить все посты администратора

Я хочу отозвать права администратора у одного профиля, но кнопки «Отозвать» нет. У других учётных записей «Персонал» на моём сайте такая кнопка есть.

Подскажите, пожалуйста, почему так происходит и как это исправить?

Просто проверяю: вы не пытаетесь лишить себя прав администратора на аккаунте, в который вы сейчас вошли?

Нет. Это другой аккаунт… Я назвал его ‘Newsbot’, и он использовался для получения RSS-лент.

Теперь я хочу удалить эти сообщения.

Существует ли email этой учётной записи в вашем файле app.yml как разработчика? Или вы выдали права разработчика через консоль?

Пользователи, указанные в файле сборки .yml как DEVELOPERS, не могут быть удалены через интерфейс по соображениям безопасности:

 ## TODO: Список email-адресов через запятую, которые будут назначены администраторами и разработчиками
 ## при первой регистрации. Пример: 'user1@example.com,user2@example.com'
 DISCOURSE_DEVELOPER_EMAILS: 'incredible_undeletables@myamazingdomain.com'

Вам нужно удалить их из файла сборки .yml и пересобрать систему.

Альтернативный, но не рекомендуемый и не поддерживаемый (я предполагаю) способ — изменить статус администратора (булево значение) в таблице users для этого пользователя на FALSE напрямую в базе данных. Примечание: я сам этого никогда не делал (никогда не отзывал права, но добавлял модераторов таким образом), но подобные действия (прямое вмешательство в БД с объектами, с которыми вы не полностью знакомы) могут иметь непредвиденные последствия, поэтому это не рекомендуется, пока не исчерпаны все другие варианты (и обязательно убедитесь на 100%, что у вас есть рабочая резервная копия БД перед этим!).

Проверьте ваш файл .yml — проблема, скорее всего, там.

Этот пользователь не указан в моём файле .yml.

Это так раздражает, когда даже администраторы лишены доступа к базовым функциям обслуживания форума.

Тогда вы можете попробовать выполнить что-то подобное напрямую в базе данных:

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

где:

  • ‘user_name_of_rouge_user’ — это строка.

и:

  • false — это булево значение.

Вот что бы я сделал, если бы у меня был пользователь с правами администратора, которого нужно лишить этих прав, но сделать это через панель администратора невозможно.

Наверное, вы случайно настроили Discobot и переименовали его в Newsbot? Бот считается системным пользователем, и вы не можете лишить его прав администратора.

Вы можете проверить, действительно ли Newsbot — это Discobot, перейдя на его страницу профиля и проверив его адрес электронной почты:

Адрес электронной почты бота будет отображаться как discobot_email.

Да, именно так мы и поступили. Этот профиль Discobot использовался для импорта RSS-лент, которые мы теперь хотим удалить. Сам профиль можно оставить, мне нужно лишь удалить все посты и темы.

Я не разработчик, поэтому буду очень признателен за простые и понятные инструкции.

Ладно, так что на самом деле вас не волнует статус администратора здесь. Ваша цель — удаление постов? На будущее, сообщайте нам о вашей конечной цели, а не о текущем шаге, который, как вы думаете, поможет вам её достичь.

Я не думаю, что у нас есть задача rake для удаления всех постов конкретного пользователя. Позвольте мне проверить несколько вещей, я вернусь к вам с ответом.

Хорошо. Следующее позволит вам удалить все посты пользователя. Вам потребуется доступ к серверу.

  1. Подключитесь по SSH к серверу, где запущен Discourse.
  2. Откройте консоль Rails вашего экземпляра Discourse.
    cd /var/www/discourse
    sudo ./launcher enter app
    rails c
    
  3. Получите идентификатор пользователя, которого хотите удалить, а затем уничтожьте все его посты. Предполагается, что имя пользователя newsbot; если это не так, обязательно отредактируйте команду.
    id = User.find_by_username('newsbot').id
    Post.where(user_id: id).each do |p|
      PostDestroyer.new(Discourse.system_user, p).destroy  
    end;