Edit: Ich dachte, ich sei clever, aber ich war es nicht. Siehe nächste Nachricht.
Hey, ich wollte nur etwas teilen, was ich herausgefunden habe: Ich verwende Discourse als Forum auf einer bestehenden Mitgliedersite, und auf meiner bestehenden Site können sich Mitglieder gegenseitig blockieren. Wenn Benutzer A Benutzer B blockiert, können sich beide Benutzer A und B weder sehen noch interagieren usw.
Ich benötigte dieselbe Funktionalität auch für Discourse. Ich habe mir den Kopf zerbrochen, um herauszufinden, wie man das umsetzt, und ich glaube, ich habe es endlich geklärt:
-
Ich habe einen Discourse-Webhook eingerichtet, um Ereignisse zu empfangen, damit ich das Ereignis
user_logged_inerfassen kann. -
Wenn sich ein Benutzer anmeldet, gehe ich durch seine „Blockieren“-Liste auf meiner Site.
-
Für jedes andere Mitglied, das sie blockieren möchten, verwende ich die Discourse-API (beachten Sie, dass dies nichts mit SSO zu tun hat), um den anderen Benutzer zu „Ignorieren“.
-
Und hier kommt der clevere Teil: Ich sage Discourse auch, dass der andere Benutzer den Hauptbenutzer ignorieren soll, der sich gerade anmeldet. Mit anderen Worten: Sowohl Benutzer A (der sich jetzt anmeldet) als auch Benutzer B (der auf der Blockierliste von Benutzer A steht) „ignorieren“ sich gegenseitig.
-
Beachten Sie, dass ich beim Senden der „Ignorieren“-Nachricht tatsächlich prüfen muss, ob sie mindestens TL2 sind, da „Ignorieren“ nur eine TL2-Funktion ist. Wenn sie es nicht sind, muss ich sie schnell auf TL2 hochstufen, bevor ich das „Ignorieren“ abschließen kann. Das Hochstufen eines Benutzers auf TL2 hat einige andere Nebeneffekte (Start des fortgeschrittenen Discobot-Skripts, Vergabe von Abzeichen), mit denen ich umgehen musste.
Ach ja, und ich blende die „Ignoriert“-Liste im Discourse-Benutzerprofil aus (einfaches CSS), da es auf der Hauptsite eine Schnittstelle zur Verwaltung blockierter Benutzer gibt. Ich möchte nicht, dass meine Discourse-Mitglieder die Discourse-Ignorierliste überhaupt sehen.
Hoffentlich hilft das anderen Leuten, die diese Art von Funktionalität benötigen…