ソーシャルアカウントのリンク解除を防ぐ

Discourse をゲーミングコミュニティで利用していますが、Steam アカウントと Discord アカウントの関連付けを解除できる機能は意味をなさないだけでなく、問題を引き起こすだけです。ユーザーがアカウントの関連付けを解除できないようにするにはどうすればよいでしょうか?SAML プラグインを使えば防止できることは承知していますが、Discourse を使ってゲーム内と Discord 両方でランク同期を促進しているため、ユーザーにリンク解除をさせたくないのです。むしろ、手動でリンク解除を行う方がマシです。

余談ですが、管理者側から Steam64 ID や Discord ID を表示することは可能でしょうか?これらは機密情報というほどではありませんし、すぐに確認できる情報として非常に役立ちます。また、これらは API 経由では公開されていませんが、私のユースケースでは API の機能が限定的です。

削除ボタンを非表示にすることで、ユーザーが無効化できないようにできます。

.btn-danger, .json-schema-editor-modal .json-editor-btn-delete {
    display: none;
}

それでは部分的に解決になりますが、それを不可能にする方法があるかどうかを知る人はいるでしょうか?理論的には、ブラウザの「要素の検査」機能を使って隠し要素を再表示できてしまいます。

編集:これを調べてみると、これを見つけました:discourse/lib/auth/managed_authenticator.rb at main · discourse/discourse · GitHub

興味深かったのは「can revoke(取り消し可能)」の部分です。ただ、組み込みの Discord 認証を修正できるかどうかはわかりません。これができるかどうかご存知の方がいれば教えてください。

編集 2:Steam の Discourse ログインを修正しようとしましたが、失敗しました(Ruby の知識不足が原因だと思われます)。以下が私が試したコードです:

# frozen_string_literal: true

# name: Steam authentication with Discourse
# about: Authenticate with Discourse with Steam
# version: 2.0.1
# author: J. de Faye, tgxworld

# omniauth-openid is not included in core since v2.4.0.beta10
unless defined? OmniAuth::Strategies::OpenID
  gem 'ruby-openid', '2.9.2', require: false
  gem 'rack-openid', '1.3.1', require: false
  gem 'omniauth-openid', '1.0.1'
end

gem 'omniauth-steam', '1.0.6'

register_svg_icon "fab-steam" if respond_to?(:register_svg_icon)

def can_revoke?
  false
end

register_asset 'stylesheets/steam-login.scss'

[
  "../lib/auth/steam_authenticator.rb",
  "../lib/validators/enable_steam_logins_validator.rb"
].each { |path| load File.expand_path(path, __FILE__) }

auth_provider authenticator: Auth::SteamAuthenticator.new, icon: 'fab-steam'

参考までに、私が修正したファイルはこちらの拡張機能から取得したものです。

編集:プラグインの全く違う部分を編集していました。Steam の場合、この機能を完全に無効化することができました。これで残るは Discord ログインの処理ですが、こちらはコアファイルなので、どうすればいいか見当がつきません。