ich suche seit einigen Wochen mit Google nach einer Lösung für mein Problem und stehe kurz davor, aufzugeben.
Der Hintergrund:
Ich entwickle und betreibe ein Admin-Panel für Sportvereine, das mehrere Mandanten unterstützt. Mein selbst gehostetes Discourse-Forum ist derzeit nur für Mitglieder dieser Vereine zugänglich. Ich möchte es jedoch für die Öffentlichkeit öffnen. Meine eigene SSO-Integration weist den Discourse-Benutzern nach dem Einloggen automatisch den vollständigen Namen aus meiner Datenbank zu.
Das Problem:
Derzeit kann ich mein Forum nicht öffentlich machen, da der vollständige Name eines Benutzers nur für andere Benutzer desselben Vereins sichtbar sein soll.
Meine Erfahrung als Ruby-Entwickler ist null (ich bin JS-Entwickler), aber bisher habe ich diesen Code-Teil herausgefunden:
# plugin.rb
after_initialize {
require_dependency 'basic_user_serializer'
require_dependency 'current_user'
class ::BasicUserSerializer
attributes :name
def name
# Feste Liste von Gruppennamen, die die Zugehörigkeit zu einem Verein anzeigen
clubGroups = Array['foo', 'bar', 'baz']
# TEIL, DEN ICH NICHT VERSTEHEN KANN:
# Zeige den Namen des Benutzers NUR, wenn sie eine der gleichen Gruppen aus den aktuellen `clubGroups` des angemeldeten Benutzers teilen,
# z. B. bin ich als Benutzer angemeldet, der zur Gruppe 'bar' gehört, was bedeutet, dass ich zum Bar-Verein gehöre. Ich sollte nur die Namen der Benutzer sehen können, die ebenfalls zur Gruppe 'bar' gehören.
???
end
end
}
Ich kann folgende Punkte nicht herausfinden:
Wie rufe ich die Gruppen des aktuellen Benutzers ab?
Wie rufe ich die Gruppen des jeweiligen Benutzers ab?
Sobald ich das habe, könnte ich die beiden Arrays mit clubGroups vergleichen und entscheiden, ob der Name des Benutzers angezeigt werden soll oder nicht.
Eine weitere Herausforderung für mich wird sein, die Möglichkeit zu deaktivieren, den eigenen Namen zu bearbeiten, aber das ist eine andere Geschichte.
Beim Versuch, die ID des aktuellen Benutzers abzurufen, um sie an die Abfrage zu übergeben, weiß ich nicht wirklich, wie ich sie abrufen kann. Wenn ich im Code zum Modell CurrentUser navigiere, ist die einzige Methode, die für meine Anforderungen relevant aussieht, current_user. Wenn ich jedoch Folgendes ausführe:
pp CurrentUser.current_user
erhalte ich folgende Fehlermeldung:
undefined method `current_user' for CurrentUser:Module
Ich glaube, mir fehlt hier definitiv ein grundlegendes Wissen über Ruby, aber vielleicht könnt ihr das leicht für mich lösen?
Du solltest dir den Code dieses Plugins ansehen. Er fügt Avatar-Flairs für Personen in denselben Gruppen hinzu, sodass sie sich als Gruppenmitglieder erkennen können. Das ist zwar eine andere Funktion, aber er enthält den Code, der prüft, ob der betrachtende Benutzer derselben Gruppe angehört wie derjenige, der den Beitrag verfasst hat.