Ich habe mich hier scheinbar selbst in eine Sackgasse manövriert.
Ich betreibe eine Mitglieder-Website (ebenfalls in Rails) und verwende die Discourse-API, um automatisch eingeschränkte Forengruppen für alle meine Benutzergruppen zu erstellen und zu befüllen. Das funktioniert hervorragend; ich lege sogar für jede Gruppe einen Wiki-Beitrag als Startpunkt an. (Ich habe meinen Code veröffentlicht.)
Nun bin ich auf ein Problem gestoßen: Manchmal muss ich die Gruppenmitgliedschaft manuell synchronisieren, beispielsweise wenn ich auf meiner Website Gruppen zusammenführe oder wenn der Koordinator versehentlich Personen über das Forum gelöscht oder hinzugefügt hat. Zu diesem Zweck möchte ich ALLE Discourse-Gruppenmitglieder löschen und anschließend diejenigen wieder hinzufügen, die tatsächlich in der Gruppe sein sollten.
Erstes Problem: Die Discourse-API scheint keine Funktion zum Löschen aller Gruppenmitglieder bereitzustellen. Ich muss also die Namen aller Personen angeben, die entfernt werden sollen.
Zweites Problem: Ich kann die aktuelle Mitgliedschaft der Discourse-Gruppe nicht wirklich abrufen, da sie aus irgendeinem Grund den GRUPPENNAMEN statt der ID verlangt. Auf meiner Website habe ich nur die Gruppen-ID gespeichert, da Discourse diese für die entsprechenden PUT-/POST-/DELETE-Anfragen verwendet.
Drittes Problem: Das sollte offensichtlich sein, aber ich sehe keinen Weg, den Namen der Gruppe abzurufen, indem ich ihre ID angebe, es sei denn, ich möchte alle 200+ Gruppen abrufen und durch sie iterieren, bis ich eine finde, deren ID übereinstimmt. Das erscheint mir als eine lächerlich aufwendige Vorgehensweise und verstößt zudem gegen Rails-Konventionen.
Was übersehe ich?
EDIT: @codinghorror war beim letzten Mal sehr hilfreich – habt ihr jetzt neue Ideen?
Du hast hier scheinbar recht – man kann auf Gruppen-Ressourcen nicht über die ID-Nummer, sondern nur über den Namen zugreifen.
Die hier referenzierte ID ist keine ID, sondern der Name, siehe:
Es wäre wahrscheinlich sinnvoll, die Route /g/<group-name> so umzustrukturieren, dass sie dem entspricht, wie wir jetzt Themen und Kategorien behandeln. Etwas wie /g/<group-name>/<id> oder /g/patrons/41, und gleichzeitig /g/41 so funktionieren zu lassen.
Bis das behoben ist, scheint der einzige Weg, das zu erreichen, was du suchst, folgender zu sein:
Den Gruppennamen zusammen mit der ID speichern.
Eine GET-Anfrage an g/<group-name>/members.json stellen, um die Mitglieder zu erhalten.
Durch diese iterieren, um jedes zu löschen, damit du neu synchronisieren kannst.
Das ist ein großartiges Problem, das es zu untersuchen gilt. Danke, dass du es angesprochen hast, @Judith! Gruppen sind so leistungsstark und bieten so viel Potenzial! Ich habe dieses Problem kürzlich ebenfalls bemerkt, als ich mich mit der Aufrechterhaltung der Gruppenmitgliedschaften in WordPress befasst habe. Es wäre ziemlich cool, wenn man Personen automatisch zu Gruppen hinzufügen oder aus ihnen entfernen könnte, basierend auf dem Land und der Region, in der sie sich befinden, den Sprachen, die sie sprechen, den Themen, die sie interessieren, usw., wenn sie sich anmelden und ihre Profile in WordPress aktualisieren.
@justins Vorschlag, sowohl den Gruppennamen als auch die Gruppen-ID zu speichern, ist gut, und ich werde ihn an die Personen weitergeben, die derzeit an dieser Integration arbeiten.
Eine weitere Funktion, die ich gerne im UI sehen würde, ist die Möglichkeit für Administratoren oder Gruppenbesitzer, alle Mitglieder aus einer Gruppe zu entfernen und sie erneut hinzuzufügen. Dies würde ihnen ermöglichen, ihre Gruppenmitgliedschaften von Zeit zu Zeit manuell zurückzusetzen, basierend auf Exporten aus WordPress, selbst wenn sie kein automatisiertes System haben, das Personen automatisch zu Gruppen hinzufügt oder aus ihnen entfernt, wenn sie ihre Profile in WordPress aktualisieren.
Ich empfehle die Nutzung von SSO zwischen deiner Hauptseite und Discourse. Auf diese Weise erhältst du die Gruppenmitgliedschaftsverwaltung kostenlos und hast einen sync_sso-Endpunkt, um die Mitgliedschaft auf einfache Weise zu aktualisieren.
Anfangs habe ich nur SSO verwendet, aber dann bin ich auf das Problem gestoßen, dass die Gruppenmitgliedschaft nur aktualisiert wird, wenn sich Benutzer anmelden. Im Fall von Personen, die nicht wiedergewählt wurden, oder die auf andere Weise das Recht verlieren, auf eine Gruppe zuzugreifen, oder die das Recht erwerben, auf eine Gruppe zuzugreifen (und E-Mail-Benachrichtigungen für Nachrichten im untergeordneten Forum der eingeschränkten Gruppe erhalten sollten), muss ich sie über die API hinzufügen/entfernen.