So erstellen Sie einen Themenfilter basierend auf der aktuellen Benutzergruppe und dem Themenstandort

Hallo,

ich arbeite an einem Plugin, das alle Themen basierend darauf filtert, wo das Thema gepostet wurde und in welcher Gruppe der Nutzer, der das Thema ansieht, Mitglied ist. Der Anwendungsfall besteht darin, dass ein Support-Team in verschiedenen Ländern Anfragen aus ihren jeweiligen Regionen bearbeitet.

Ich bin ein Anfänger bei der Erstellung von Discourse-Plugins und lerne noch, wie das geht. Die Themenstandorte werden über das Locations-Plugin hier geregelt: Locations Plugin 🌍

Die Benutzer, die diese gefilterte Ansicht benötigen, füge ich einer Gruppe hinzu, die etwa NA_queue oder EU_queue heißt.

Das Plugin prüft, ob der Nutzer eingeloggt ist und ob eine Primärgruppe festgelegt ist. Wenn ja, werden alle Themen so gefiltert, dass sie der Warteschlange entsprechen, zu der der aktuelle Nutzer gehört.

Ich denke, das könnte mit etwas Ähnlichem wie dem folgenden Code umgesetzt werden:
after_initialize do
require_dependency ‘topic_query’

  # Wenn eingeloggt und Primärgruppe festgelegt

  # Primärgruppe des Benutzers ermitteln
  # Themenstandort ermitteln

  TopicQuery.add_custom_filter(:location) do |results, topic_query|
    filter = "EINIGE SQL-ABFRAGE HIER"
    results = results.joins("{filter}")

    results
  end

Ist das ein guter Ansatz für mein Problem?
Außerdem: Hat jemand Vorschläge, wie die SQL-Abfrage aussehen könnte oder wie man die beiden kommentierten Informationen erhält?

Ich habe keine Berechtigungen, um meine Frage zu aktualisieren, also poste ich das hier einfach. Update:

Ich stecke gerade fest, wie ich den aktuellen Benutzer von der JavaScript-Seite im Browser an meinen Code auf der Serverseite übergeben kann. Es gibt wahrscheinlich einen Leitfaden dazu, aber ich bin ihm noch nicht über den Weg gelaufen :frowning:

Der folgende Code funktioniert hervorragend als Filter für den Standort von Beiträgen:

after_initialize do

  # Ruft den aktuellen Benutzer ab, der irgendwie von der Client-Seite übergeben wurde
  def self.filter_on_user

    require_dependency 'topic_query'

    # Wenn der aktuelle Benutzer eine primäre Gruppe hat, setze den Ländercode
    # Derzeit nehmen wir an, der Ländercode für die USA ist US
    countrycode = "us"

    # Filtere für alle Topic-Abfragen auf der Site für diesen Benutzer nach diesem Ländercode.
    TopicQuery.add_custom_filter(:location) do |results, topic_query|

      results = results.joins("JOIN topic_custom_fields tc ON
                               topics.id = tc.topic_id AND
                               tc.name = 'location' AND
                               tc.value LIKE '%countrycode\":\"#{countrycode}%'")
      results
    end
  end

  filter_on_user

end