J’ai un site d’adhésion (également en Rails) et j’utilise l’API Discourse pour créer et remplir automatiquement des groupes de forum restreints pour tous mes groupes d’utilisateurs. Cela fonctionne très bien ; je donne même à chaque groupe un post wiki pour commencer. (J’ai publié mon code.)
Maintenant, je me heurte au problème que parfois je dois synchroniser manuellement l’appartenance aux groupes, par exemple lors de la fusion de groupes sur mon site ou lorsque le coordinateur a accidentellement supprimé/ajouté des personnes via le forum. À cette fin, je veux supprimer TOUS les membres du groupe Discourse, puis les réajouter ceux qui devraient y être.
Premier problème : l’API Discourse ne semble pas inclure de fonction DELETE ALL pour les membres du groupe, je dois donc spécifier les noms de tous ceux qui doivent être supprimés.
Deuxième problème : je ne peux pas réellement récupérer l’appartenance actuelle du groupe Discourse, car pour une raison quelconque, cela me demande le NOM du groupe plutôt que son ID. J’ai seulement stocké l’ID du groupe sur mon site, car c’est ce que Discourse utilise pour les requêtes PUT/POST/DELETE associées.
Troisième problème : cela devrait être évident, mais je ne vois pas de moyen de récupérer le nom du groupe en fournissant son ID, sauf si je veux récupérer les 200+ groupes et parcourir jusqu’à en trouver un dont l’ID correspond. Cela semble être une quantité déraisonnable de travail et contrevient également aux conventions Rails.
Qu’est-ce que je rate ?
EDIT : @codinghorror a été très utile la dernière fois – avez-vous des idées maintenant ?
Vous avez raison sur ce point : vous ne pouvez pas accéder aux ressources de groupe avec le numéro d’ID, uniquement avec le nom.
L’ID mentionné ici n’est pas un ID, mais le nom, selon
Il serait probablement logique de refactoriser la route /g/<nom-du-groupe> pour qu’elle corresponde à la façon dont nous gérons désormais les sujets et les catégories. Quelque chose comme /g/<nom-du-groupe>/<id> ou /g/patrons/41 et permettre à /g/41 de fonctionner de la même manière.
En attendant que nous corrigions cela, il semble que la seule façon de réaliser ce que vous recherchez soit :
Stocker le nom du groupe à côté de l’ID
Effectuer une requête GET sur g/<nom-du-groupe>/members.json pour obtenir les membres
Boucler sur ceux-ci pour les supprimer afin de pouvoir resynchroniser.
C’est un problème fascinant sur lequel il est intéressant de se pencher. Merci de l’avoir soulevé, @Judith ! Les groupes sont extrêmement puissants et regorgent de possibilités ! J’ai moi-même remarqué ce problème récemment, en travaillant sur la gestion de l’appartenance aux groupes depuis WordPress. Ce serait vraiment génial de pouvoir ajouter ou supprimer automatiquement des personnes des groupes en fonction de leur pays et région d’origine, des langues qu’elles parlent, des thèmes qui les intéressent, etc., lors de leur inscription et de la mise à jour de leurs profils sur WordPress.
La suggestion de @justin de stocker à la fois le nom du groupe et l’ID du groupe est excellente, et je la transmettrai aux équipes qui travaillent actuellement sur cette intégration.
Une fonctionnalité que j’aimerais également voir ajoutée à l’interface utilisateur est la possibilité pour les administrateurs ou les propriétaires de groupes de supprimer en masse tous les membres d’un groupe, puis de les réajouter. Cela leur permettrait de réinitialiser manuellement leurs appartenances aux groupes de temps en temps, en se basant sur des exports depuis WordPress, même s’ils ne disposent pas d’un système automatisé pour ajouter ou supprimer des personnes des groupes lors de la mise à jour de leurs profils sur WordPress.
Je recommande d’utiliser SSO entre votre site principal et Discourse. De cette façon, vous obtenez la gestion des adhésions aux groupes gratuitement, et vous aurez un point de terminaison sync_sso pour mettre à jour l’adhésion de manière simple.
Au début, j’utilisais uniquement l’authentification unique (SSO), mais j’ai ensuite rencontré le problème suivant : les appartenances aux groupes ne sont mises à jour que lors de la connexion des utilisateurs. Dans le cas où des personnes ne sont pas réélues, perdent autrement le droit d’accéder à un groupe, ou acquièrent ce droit (et doivent recevoir des notifications par e-mail pour les messages dans le sous-forum du groupe restreint), je dois les ajouter ou les supprimer via l’API.
sync_sso existe précisément pour résoudre ce problème ! Vous pouvez déclencher ce qui équivaut à une connexion SSO « virtuelle » à chaque modification d’appartenance afin de synchroniser complètement un utilisateur.