API de Grupos: ¿sincronización manual de la membresía del grupo?

Parece que me he metido en un callejón sin salida…

Tengo un sitio de membresía (también en Rails) y estoy utilizando la API de Discourse para crear y poblar automáticamente grupos de foros restringidos para todos mis grupos de usuarios. Esto funciona muy bien; incluso estoy asignando una publicación de wiki a cada grupo para comenzar. (He publicado mi código.)

Ahora me he encontrado con el problema de que a veces necesito sincronizar manualmente la membresía del grupo, por ejemplo, al fusionar grupos en mi sitio o cuando el coordinador elimina/agrega personas accidentalmente a través del foro. Para este propósito, quiero eliminar a TODOS los miembros del grupo de Discourse y luego volver a agregar a los que deberían estar en él.

Primer problema: la API de Discourse no parece incluir una opción para eliminar TODOS los miembros del grupo, por lo que tengo que especificar los nombres de todos los que deben ser eliminados.

Segundo problema: en realidad no puedo recuperar la membresía actual del grupo de Discourse porque, por alguna razón, me está pidiendo el NOMBRE del grupo en lugar del ID. Solo he almacenado el ID del grupo en mi sitio, ya que es lo que Discourse utiliza para las solicitudes PUT/POST/DELETE relacionadas.

Tercer problema: debería ser obvio, pero no veo una forma de recuperar el nombre del grupo proporcionando su ID, a menos que quiera recuperar los 200+ grupos e iterar sobre ellos hasta encontrar uno cuyo ID coincida. Esto parece una cantidad ridícula de trabajo y también va en contra de las convenciones de Rails.

¿Qué estoy pasando por alto?

EDICIÓN: @codinghorror fue muy útil la última vez; ¿tiene alguna idea ahora?

No estoy seguro, pero quizás @justin o @blake puedan revisar esto durante su próxima semana laboral.

Parece que tienes razón en esto: no puedes acceder a los recursos del grupo con el número de ID, solo con el nombre.

El ID mencionado aquí no es un ID, sino el nombre, según

Probablemente tenga sentido refactorizar la ruta /g/<nombre-del-grupo> para que coincida con cómo manejamos ahora los temas y las categorías. Algo como /g/<nombre-del-grupo>/<id> o /g/patrons/41 y permitir que /g/41 funcione de la misma manera.

Hasta que arreglemos eso, sin embargo, parece que la única manera de lograr lo que buscas es:

  1. Almacenar el nombre del grupo junto con el ID
  2. Hacer una solicitud GET a g/<nombre-del-grupo>/members.json para obtener los miembros
  3. Iterar sobre ellos para eliminar cada uno y así poder volver a sincronizar.

Este es un problema excelente que vale la pena investigar. ¡Gracias por plantearlo, @Judith! Los grupos son muy poderosos y tienen un gran potencial! :rocket: También noté este problema recientemente al trabajar en el mantenimiento de la membresía de grupos desde WordPress. Sería muy útil poder agregar o eliminar automáticamente a las personas de los grupos según el país y la región del mundo donde dicen estar ubicadas, los idiomas que hablan, los temas que les interesan, etc., cuando se registran y actualizan sus perfiles en WordPress.

La sugerencia de @justin de almacenar tanto el nombre del grupo como su ID es muy buena, y se la transmitiré al equipo que está trabajando en esta integración ahora.

También me encantaría ver una función añadida a la interfaz de usuario que permita a los administradores o propietarios de grupos eliminar masivamente a todos los miembros de un grupo y volver a agregarlos. Esto les permitiría restablecer manualmente las membresías de sus grupos de vez en cuando, basándose en exportaciones desde WordPress, incluso si no tienen un sistema automatizado para agregar o eliminar personas de los grupos a medida que actualizan sus perfiles en WordPress.

Recomiendo usar SSO entre tu sitio principal y Discourse. De esta manera, obtienes la gestión de membresías de grupos de forma gratuita y dispondrás de un punto final sync_sso para actualizar la membresía de manera sencilla.

Al principio solo usaba SSO, pero luego me encontré con el problema de que solo actualiza la pertenencia a grupos cuando las personas inician sesión. En el caso de que alguien no sea reelegido, o pierda de otra manera el derecho de acceso a un grupo, o gane el derecho de acceso a un grupo (y deba recibir notificaciones por correo electrónico de los mensajes en el subforo del grupo restringido), necesito agregarlos o eliminarlos mediante la API.

¡sync_sso existe para abordar exactamente este problema! Puedes activar lo que es efectivamente un inicio de sesión SSO “virtual” en cualquier momento que haya un cambio de membresía para sincronizar completamente a un usuario.

¡Hola!

¿Está esta función disponible ahora? ¿Alguna novedad al respecto?

¡Gracias!

¿Alguna novedad? @tobiaseigen