Keine Kategorienbenachrichtigungen für gestaffelte Benutzer in privaten Kategorien

Stagierte Benutzer auf meiner Instanz erhalten keine E-Mail-Benachrichtigungen für Beiträge in privaten Kategorien, selbst wenn sie einer Gruppe hinzugefügt wurden, die ihnen dies ermöglichen sollte. Dies scheint mit einer kürzlichen Änderung in Discourse nicht mehr zu funktionieren.


:ballet_shoes: Schritte zur Reproduktion:

  1. Einen stagierte Benutzer erstellen
  1. Eine Kategorie erstellen, die nur für eine bestimmte Gruppe sichtbar ist (Mitglieder können „Erstellen / Antworten / Ansehen“, aber keine anderen Berechtigungen zugewiesen)

  2. Den stagierte Benutzer zur Gruppe hinzufügen, indem Sie seine E-Mail-Adresse auf der Schaltfläche „Mitglieder im Bulk hinzufügen“ eingeben

  • Das Dialogfeld „Mitglieder hinzufügen“ erkennt die Benutzernamen stagierte Benutzer nicht, wahrscheinlich absichtlich)
  • Der Benutzer erscheint jedoch in der Mitgliederliste
  1. Gehen Sie zur Präferenzseite des stagierte Benutzers und stellen Sie ihn auf „Beobachten“ für die Kategorie ein

  2. Erstellen Sie einen neuen Beitrag in der privaten Kategorie

:white_check_mark: Auf der Dev-Site meiner Community (läuft unter v2.4.0.beta3 +10) wird erfolgreich eine E-Mail-Benachrichtigung an den stagierte Benutzer sowie an alle nicht stagierte Benutzer gesendet, die die Kategorie beobachten.

:negative_squared_cross_mark: Auf unserer Live-Site (läuft unter 2.4.0.beta9) erscheint nichts über den Beitrag auf der Benachrichtigungsseite des Benutzers. Wenn ich den Benutzer dann ent-stagiere, indem ich auf der Admin-Seite für seinen Benutzer auf „Impersonate“ klicke, funktionieren die Benachrichtigungen wieder einwandfrei.


:wrench: Die beiden Sites haben fast identische Konfigurationen (SSO ist auf beiden aktiviert).


:art: Hintergrund

Unser Anwendungsfall ist, dass wir Mailinglisten auf Discourse migrieren, die jedoch für private Untergruppen unserer Community gedacht sind (daher die Kategorie, die nur für Mitglieder einer bestimmten Gruppe sichtbar ist). Wir möchten stagierte Benutzer für Personen unterstützen, die es vorziehen, weiterhin per E-Mail zu interagieren, um den Übergang von den bestehenden Listen zu erleichtern.

Der einfachste Weg, den wir gefunden haben, damit Menschen weiterhin standardmäßig alle Nachrichten erhalten, die an die Mailingliste gesendet werden (einer der Hauptvorteile des Wechsels zu Discourse ist die Möglichkeit, den E-Mail-Aufwand zu reduzieren, ohne die Liste ganz zu verlassen, daher scheint es fair, mit dem bestehenden Verhalten des Empfangens aller Nachrichten zu beginnen), besteht darin, Mozillas group-category-notification-Plugin zu verwenden, damit alle Mitglieder der Gruppe die Kategorie „beobachten“.

Ich habe gelesen, dass das Hinzufügen stagierte Benutzer zu Gruppen „jederzeit aufhören könnte zu funktionieren", daher bin ich offen für andere Ideen :pray:

1 „Gefällt mir“

Wir haben kürzlich eine Korrektur vorgenommen, da gestaffelte Benutzer Benachrichtigungen für Inhalte erhalten haben, die sie eigentlich nicht einsehen sollten:

@Roman, wenn der Benutzer jedoch Zugriff auf die Gruppe hat, sollte es doch funktionieren, oder?

5 „Gefällt mir“

@eviltrout danke, das sieht genau nach dem Problem aus:

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

Die Logik hat sich geändert von der Prüfung, ob can_see_category?(topic.category) erfolgreich ist (was meiner Meinung nach der Fall ist, wie unten gezeigt), zur Verweigerung der Benachrichtigung, wenn der Benutzer in allen Fällen gestaged ist.

Ist das nicht ein Fehler? :bug: Andernfalls erhalten gestagte Benutzer niemals Benachrichtigungen für Beiträge in privaten Kategorien, selbst wenn ihnen explizit die Berechtigung erteilt wurde. Soll ich das in bug verschieben?

can_see_category?

Ich denke, can_see_category? schlägt durch, wegen der letzten Zeile:

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
    # diese hier:
    secure_category_ids.include?(category.id)
  end
  • der Benutzer ist gestaged
  • die Kategorie hat eine “Email In”-Adresse konfiguriert
  • category.email_in_allow_strangers ist aktiviert) Ich habe email_in_allow_strangers deaktiviert, da mir aufgefallen ist, dass ich es nicht brauche … aber secure_category_ids.include?(category.id) gibt true zurück
1 „Gefällt mir“

Ich habe einen Pull-Request eingereicht, der Benachrichtigungen für gestaffelte Nutzer wiederherstellt:

EDIT: Zusammengeführt! Danke euch allen

6 „Gefällt mir“

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