フルネームの公开範囲を特定のグループに制限する

背景
私たちは、オープンアクセスとプライバシーへの配慮のバランスを取るために、サイトをセットアップしようとしています。

  1. サイトは全体的に公開されており、匿名ユーザーは閲覧でき、検索エンジンはインデックス化できます。ユーザー名は公開されます。
  2. 実名(フルネーム)とプロフィールは、半公開と見なされます。コミュニティメンバーのみに公開されるべきです(ウェブクローラーや匿名の閲覧者には公開されません)。
  3. メールアドレスは完全にプライベートと見なされます。管理者のみがアクセスでき(アクセスは監視されています)。

Discourse はデフォルトで (1) と (3) を処理します。(やった!)(2) の達成に問題があります。

「投稿に表示名を表示」を無効にし、「ユーザープロファイルを非公開にする」を有効にすると、いくらか改善されたように見えますが、(2) を完全に達成できません。ユーザー検索結果やバッジ受賞者リストには、依然としてフルネームが表示されます(*)。UI がフルネームを表示しない場所でも、サーバーはそれを送信しています。例えば、取得されたトピックの JSON では、各投稿オブジェクトに「name」(および「display_username」?)が引き続き設定されています。

私たちはユーザーに「あなたの実名はコミュニティメンバーにのみ公開されます」という約束をしたいのですが、サーバーがあちこちでフルネームを漏洩している場合、それはできません。

提案機能
「フルネームの公開をグループに制限する」設定はどうでしょうか。以下のプロパティがあります。

  • 設定値は、グループの許可リストです(「全員、匿名ユーザーでも」を意味する値を含む)。
  • クエリが許可リストと一致するクライアントセッションから来た場合、サーバーはフルネームで応答します。それ以外の場合、フルネームが表示される可能性のあるフィールドは null 値になるか、オブジェクトから除外されます。

これにより、(2) が解決されると思います。また、実名を表示する基準を TL1(TL0 の代わりに)に設定することも可能になります。

私が求めていることは、既存の「名前を表示」設定の、より細かいバージョンのものかもしれない(:blush:)ことに気づきました(もしそれを無効にすることがサーバー側で約束どおりに機能し、クライアントにフルネームを公開しない場合)。おそらく、これは実装が非常に簡単になるでしょう… :thinking:

これは Discourse コアの妥当な機能のように思えますか?

(あるいは、プラグインで達成可能でしょうか?コアに含める方が望ましいですが、実際にサイトを一般公開できるようにしたいのです。)

(*:匿名ユーザーがユーザー検索を実行したり、バッジ受賞者リストを表示したりすることを防ぐこと、したがって、すべてのユーザーのリストを簡単に取得できることを防ぐことは、まったく別のトピックであり、別のトピックです。)

「いいね!」 3

フォローアップ:これを実装し始めました。基本的なアプローチは次のとおりです。

  • 新しいサイト設定「グループにフルネームを表示」(つまり、「任意のユーザーのフルネームが表示されるグループ」)を追加します。
  • Guardian に新しい can_see_full_names? 述語を追加し、サイト設定を確認します。
  • SiteSetting.enable_names の多くのインスタンスを can_see_full_names? 述語に置き換えます。

これはほとんど簡単でしたが、最大の障害は、シリアライザーが scope パラメータを転送しないことで、それ自体が小さなサブプロジェクトになりました。

「いいね!」 2