管理者がすべての投稿を削除する方法

特定のプロファイルから管理者権限を剥奪したいのですが、「剥奪」ボタンがありません。当サイトの他の「スタッフ」アカウントにはボタンが表示されています。

なぜそうなっているのか、またどうすれば解決できるかご教示ください。

「いいね!」 1

現在ログインしているアカウントから管理者アクセスを剥奪しようとしていないか確認させてください。

「いいね!」 2

いいえ、それは別のアカウントです……『ニュースボット』と呼んでいて、RSSフィードの取得に使用していました。

今、その投稿を削除したいと考えています。

「いいね!」 1

このアカウントのメールアドレスが app.yml ファイルで開発者として登録されていますか?それとも、コンソール経由で開発者権限を付与しましたか?

「いいね!」 1

セキュリティ上の理由により、.yml ビルドファイルの DEVELOPERS にリストされているユーザーは、UI から削除することはできません。

 ## TODO: 初期登録時に管理者および開発者に指定される、カンマ区切りのメールアドレスのリスト。例:'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'incredible_undeletables@myamazingdomain.com'

このユーザーを削除するには、.yml ビルドファイルから削除し、ビルドを再実行する必要があります。

別の方法として、推奨されずサポートもされていません(推測ですが)、データベース上で直接そのユーザーの users テーブルにある管理者ステータス(ブール値)を FALSE に変更する方法もあります。注意:私はこの方法で権限を剥奪したことはありません(ただし、この方法でモデレーターを追加したことはあります)。このように、完全に理解していないものを直接データベースでいじる行為は、予期せぬ結果を招く可能性があるため、他の手段がすべて失敗した場合を除き推奨されません(実施する前に、必ずデータベースの完全なバックアップが取れていることを確認してください!)。

.yml ファイルを確認してください。問題は、ほぼ確実にそこにあります。

このユーザーは私の .yml ファイルに登録されていません。

管理者でさえ、基本的なフォーラム管理機能からロックアウトされてしまうのは、本当に腹が立ちます。

その場合、データベース上で以下のように試してみてください。

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

ここで:

  • ‘user_name_of_rouge_user’ は文字列です。

そして:

  • false はブール値です。

これは、管理者権限を持つ不正なユーザーがいて、それを無効化する必要があるが、管理パネルでは実行できない場合に私が行う方法です。

「いいね!」 1

ひょっとして、Discobot をカスタマイズして「Newsbot」に名前を変更したのでしょうか?このボットはシステムユーザーとして扱われるため、管理者権限を剥奪することはできません。

Newsbot が本当に Discobot かどうかを確認するには、そのプロフィールページにアクセスし、メールアドレスを確認してください。

ボットのメールアドレスは discobot_email として表示されます。

「いいね!」 8

はい、私たちが行ったのはまさにそれです。この Discobot プロフィールは RSS フィードを取り込むために使用されていましたが、現在はそれを削除したいと考えています。プロフィール自体は残したまま、すべての投稿やトピックだけを削除したいのです。

私は開発者ではないため、簡単な手順をいただけると大変助かります。

はい、つまりあなたはここでの管理者権限について実際には気にしていないのですね。あなたの目的は投稿の削除ですか?今後の提案として、あなたが到達したい最終目標を伝えてください。そのために役立つとあなたが考えている現在のステップではなく。

特定のユーザーのすべての投稿を削除する rake タスクは存在しないと思います。いくつか試してみますので、後で連絡します。

はい。以下の手順で、特定のユーザーのすべての投稿を削除できます。サーバーへのアクセス権が必要です。

  1. Discourse が実行されているサーバーに SSH で接続します。
  2. Discourse インスタンスの Rails コンソールにアクセスします。
    cd /var/www/discourse
    sudo ./launcher enter app
    rails c
    
  3. 削除したいユーザーの ID を取得し、そのユーザーのすべての投稿を削除します。これはユーザー名が newsbot であると仮定しています。異なる場合は、必ずコマンドを編集してください
    id = User.find_by_username('newsbot').id
    Post.where(user_id: id).each do |p|
      PostDestroyer.new(Discourse.system_user, p).destroy  
    end;
    
「いいね!」 4