Membresía de grupos jerárquicos (grupos dentro de grupos)

For our running club, I’m coordinating a year-long challenge that has a team component. For each 10-year age-group team, I’m creating a Discourse group so they can be @mentioned and potentially have their own conversations, though I very much doubt anyone will figure that out. So I have seven groups for each of the age-group teams, and I have to update those manually as people register.

I also want to have an uber-group that contains all the people who are participating in the challenge. It would be a LOT easier if I could have the larger Challengers group merely contain the sub-groups for 19-and-under, 20-29, 30-39, and so on. That way I could just manage the sub-groups and have the changes flow through to the uber-group.

Is there (or could there be) a way to do this, or am I stuck having to manually type in every username from the sub-groups? (I think this will be several hundred people all told, and a weekly task.)

6 Me gusta

You should be same to use Bulk Add to Group, which will save you a lot of typing!

I don’t think we have plans to implement full hierarchical group membership resolution.

2 Me gusta

I keep being confused by references Bulk Add to Group, since it doesn’t appear in the UI as far as I can tell—the screenshots from the 2015 topic you linked to don’t match with what I see now. Is it just the same as using the Add Members dialog within a group?

And how can I copy a list of members of one group to be able to bulk add to another? The best workflow I can come up with at the moment is to copy the text of the Members page and use a style-savvy grep (in Nisus Writer Pro) to copy the usernames. Doable, but not exactly easy.

1 me gusta

There are quite a few references to the “bulk add to group” feature here on Meta, but I don’t see it active anymore at https://discourse.example.org/admin/groups/bulk, just a blank page (I checked a couple different sites where I have admin rights). Do you see anything there @adamengst?

1 me gusta

Sorry for the delay—missed the notification. No, I don’t have a page at

https://forum.fingerlakesrunners.org/admin/groups/bulk at all (404), and the main groups page is at FLRC Forum

No mention of Bulk Add anywhere that I can find.

1 me gusta

I guess this is a bit of a hidden feature, but you can use the bulk invite feature to add existing users to groups. Just prep a csv with the email address and group as explained in the modal, and upload it. The users will not be emailed.

2 Me gusta

@tobiaseigen Aha! Do you happen to know if that would handle group updates for existing users if the email address in question already has an account?

Yes. That is precisely what I mean by this:

This feature seems to be doing double duty and we can improve the UI. I will propose something.

3 Me gusta

Awesome, thanks! Off to LibreOffice Calc I go! :keyboard:

1 me gusta

Thanks! That’s getting closer, although I’ll note that keying off email address often works poorly for me because lots of people have multiple addresses, so I have to verify ahead of time whether I’m inviting the one that’s associated with an account or another one that will be confusing (and potentially set them up with a second account).

I don’t know how the underlying foundation works, but it would seem simplest to allow groups to contain references to other groups.

1 me gusta

You could always do a user export and then use the exported CSV to create a new list to import back using the bulk invite feature. Sounds like you just need to do this once to get the system set up with your existing users, then manually when new people join or make a change to their age bracket.

Maye there’s a case for custom code to semi-automate this for your community - you could post a request in marketplace if you have a budget.

1 me gusta

Good point on the user export—I wasn’t thinking about that as a way to populate the list with accounts to start. I’ll keep noodling on this and see how it works out.

1 me gusta

Los grupos jerárquicos (grupos como miembros de grupos) tendrían la ventaja adicional de eliminar automáticamente a los miembros de los grupos heredados.

Para implementar dicha función “manualmente”, tendría que recordar si una membresía de grupo se heredó de un grupo jerárquicamente superior o se estableció directamente.

¿Podría comentar sobre el uso de un servicio de directorio de usuarios externo (ldap) para implementar una función de grupo jerárquico?

2 Me gusta

@angus Me pregunto si GroupAssociatedGroup ya implementa la intención de este hilo.

No, esa función se ocupa de la sincronización de grupos en servicios externos con grupos de Discourse, no de las jerarquías de grupos.

1 me gusta

Desde que inicié este hilo, pensé que simplemente intervendría y diría que mi solicitud de grupos jerárquicos sigue siendo completamente relevante.

La función de invitación masiva a grupos simplemente no entra en juego porque, en mi caso, estoy agregando personas a grupos específicos basados en la edad y a un grupo general que abarca todos los grupos basados en la edad en un período de 4 meses a medida que se registran en otro sistema.

Veré si mi desarrollador puede automatizar el proceso este año, ahora que sé lo increíblemente tedioso que es hacerlo manualmente semanalmente.

1 me gusta

@adamengst ¿Algún avance aquí?

Sí, de hecho, mi desarrollador pudo sincronizar datos de Webscorer, que usamos para el registro de carreras, con grupos de Discourse. Requiere que los nombres coincidan, pero él construyó una página de administración que muestra cuándo no lo hacen.

Así que no hay jerarquía, pero estamos poblando varios grupos automáticamente, lo que elimina la principal necesidad que tenía.

Es código de código abierto, así que probablemente pueda compartirlo si a alguien le interesa ver cómo funciona.

3 Me gusta

También recibí una solicitud directa para esto, así que si alguien quisiera revisar el código de @SteveDesmond.ca para escribir en grupos de Discourse, está disponible en:

Y Steve dijo que está feliz de responder preguntas al respecto.

2 Me gusta

Aquí tienes un esquema del código específico que Adam mencionó anteriormente:

  1. (L36) obtener todos los usuarios del sistema externo
  2. (L37) obtener todos los usuarios de Discourse
  3. (L38-39) obtener todos los miembros de los grupos en cuestión (global es el “supergrupo” en este caso)
  4. (L46-78) para cada usuario del sistema externo, comprobar si existe en Discourse y mapear a qué grupos ya pertenece y a cuáles necesita ser añadido
1 me gusta