プライベートカテゴリにおけるステージドユーザーへのカテゴリ通知なし

私のインスタンスにあるステージドユーザーは、プライベートカテゴリの投稿に対してメール通知を受け取っていません。許可を与えるグループに追加された場合でも同様です。これは、Discourse の最近の変更により機能しなくなったようです。


:ballet_shoes: 再現手順:

  1. ステージドユーザーを作成する
  1. 特定のグループにのみ表示されるカテゴリを作成する(メンバーは「作成/返信/閲覧」が可能だが、他の権限は割り当てていない)

  2. 「グループへの一括追加」ボタンでステージドユーザーのメールアドレスを入力し、そのユーザーをグループに追加する

  • 「メンバーを追加」ダイアログボックスはステージドユーザーのユーザー名を認識しません(おそらく仕様によるものです)
  • ただし、ユーザーはメンバーリストに表示されます
  1. ステージドユーザーの設定ページに移動し、そのカテゴリを「監視中」に設定する

  2. プライベートカテゴリに新しい投稿を作成する

:white_check_mark: コミュニティの開発サイト(v2.4.0.beta3 +10 実行中)では、ステージドユーザーおよびそのカテゴリを監視している他の非ステージドユーザーに対して、正常にメール通知が送信されます。

:negative_squared_cross_mark: 一方、2.4.0.beta9 を実行中の本番サイトでは、投稿に関する通知がユーザーの通知ページに表示されません。その後、管理ページでユーザーの「なりすまし」をクリックしてステージド状態を解除すると、通知が正常に届くようになります。


:wrench: 2 つのサイトはほぼ同一の設定です(両方で SSO が有効になっています)。


:art: 背景

当社のユースケースは、メーリングリストを Discourse へ移行することですが、これらのリストはコミュニティ内のプライベートなサブグループ向けです(そのため、特定のグループのメンバーにのみ表示されるカテゴリを作成しています)。また、メールでのやり取りを継続することを希望する方のために、移行をスムーズにするためステージドユーザーのサポートも提供したいと考えています。

メーリングリストに送信されるすべてのメッセージをデフォルトで受け取り続ける最も簡単な方法(Discourse への移行の主な利点の 1 つは、リストから完全に離脱せずにメールの量を抑えられるようになることですが、まずは既存の「すべて受信」の動作から始めるのが妥当と思われます)は、Mozilla の group-category-notification プラグイン を使用し、グループの全メンバーがカテゴリを「監視中」に設定することです。

ステージドユーザーをグループに追加する機能が「いつ停止するかわからない」 と聞いたことがありますので、他のアイデアも歓迎します :pray:

「いいね!」 1

最近、ステージングユーザーが本来閲覧できないコンテンツの通知を受け取っていたため、修正を追加しました。

@Roman、ユーザーがそのグループにアクセス権を持っているなら、正しく動作するはずです。

「いいね!」 5

@eviltrout ありがとうございます、まさに問題のようです。

# lib/guardian/topic_guardian.rb, 152 行目
-    can_see_category?(topic.category)
+    category = topic.category
+    can_see_category?(category) &&
+       (!category.read_restricted || !is_staged? || topic.user == user)

ロジックが、can_see_category?(topic.category) が通過するかどうかをチェックするもの(以下に示す通り、これは通過していると思います)から、ユーザーがステージングされている場合、すべてのケースで通知を許可しないように変更されています。

これはバグではないでしょうか?:bug: そうでなければ、ステージングされたユーザーは、明示的に許可されていても、プライベートカテゴリの投稿に対する通知を一切受け取れなくなります。Contribute > Bug に移動すべきでしょうか?

can_see_category?

最後の行のせいで、can_see_category? は通過していると思います。

def can_see_category?(category)
    return false unless category
    return true if is_admin?
    return true if !category.read_restricted
    return true if is_staged? && category.email_in.present? && category.email_in_allow_strangers
    # これ:
    secure_category_ids.include?(category.id)
  end
  • ユーザーはステージングされています
  • カテゴリには「メール受信」アドレスが設定されています
  • category.email_in_allow_strangers が有効になっている 私は email_in_allow_strangers を無効にしました。必要ないと気づいたからです… しかし secure_category_ids.include?(category.id) は true を返します
「いいね!」 1

ステージングされたユーザーへの通知を復元するプルリクエストを提出しました:

編集:マージされました!皆さんありがとう

「いいね!」 6

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.