Tengo un caso de uso específico y me gustaría saber si existe una forma más sencilla de hacerlo.
No todos nuestros usuarios (vía nuestro SSO) tienen cuentas de foro activas.
Regularmente necesitamos agregar usuarios a un grupo del foro para darles acceso a un foro privado.
No se sabe si los usuarios tienen cuentas de foro activas antes de intentar agregarlos al grupo.
Por ejemplo:
Cada mes, un miembro del personal tiene una lista de más de 100 cuentas que califican para acceder al foro privado. Esas cuentas tienen nombres de usuario de SSO y direcciones de correo electrónico, pero pueden no tener una cuenta de foro aún.
¿Existe una forma sencilla de agregar personas a un grupo si ya tienen cuentas de foro, e invitarlas al foro (agregándolas automáticamente al grupo) si no las tienen?
En la página de Grupos, el botón Agregar miembros permite pegar una lista separada por comas de nombres de usuario. Cuando esos nombres de usuario son válidos, se agregarán al grupo. Cuando un nombre de usuario no es válido (es decir, aún no tiene cuenta de foro), falla y no se agrega.
Aparte de revisar manualmente la lista de usuarios agregados con éxito al grupo, identificar qué nombres de usuario no se agregaron y luego enviarles una invitación al foro (por ejemplo, (Superseded) Multiple Use Invite Links), ¿existe una forma sencilla de combinar la invitación y la adición al grupo para una mezcla de usuarios actuales y potenciales del foro?
¿Has considerado agregar usuarios a grupos de Discourse usando los parámetros SSO add_groups y remove_groups? Para los usuarios que existen en tu sitio proveedor de SSO, puedes crear cuentas en Discourse para ellos y agregarlos a grupos de Discourse haciendo una llamada a la API a la ruta sync_sso. Hay algunos detalles sobre cómo configurarlo aquí: Sincronizar datos de usuario SSO con la ruta sync_sso. Podemos proporcionarte más detalles sobre cómo configurarlo si parece un enfoque que podría funcionar para ti.
Todos nuestros usuarios existen en el sitio de SSO (son vendedores en nuestros mercados), pero solo un subconjunto de ellos llega a crear cuentas en Discourse para usar nuestros foros. Ese SSO cubre tanto a clientes como a vendedores: no querríamos crear automáticamente cuentas de Discourse para todos los clientes (¡hay demasiados!), pero hacerlo para todos los vendedores simplificaría las cosas drásticamente.
En este caso, necesitamos conceder acceso a grupos de foros privados solo a vendedores específicos cuando comienzan a utilizar mercados o servicios concretos.
Por ejemplo: un vendedor en el Mercado 1 tiene una cuenta de SSO. Podría crear una cuenta de Discourse en esta etapa al iniciar sesión en los foros.
Más adelante, ese vendedor obtiene acceso al Mercado 2 y su cuenta de SSO registrará ese cambio. Tenemos un grupo de usuarios personalizado (y una categoría de foro privada) para ese mercado.
Si ya tiene una cuenta de Discourse en esta etapa, necesitaremos actualizar sus grupos para que pueda ver el área del foro privada.
Si aún no tiene una cuenta de Discourse, nos gustaría crear una para él con los grupos correspondientes.
El equipo actualmente utiliza la opción “agregar al grupo” con una lista de nombres de usuario separados por comas. Si los usuarios ya tienen una cuenta de Discourse, obtienen acceso al grupo… si aún no están en los foros, no hace nada.
Para captar a los usuarios que han creado sus cuentas de Discourse desde la última vez que se agregó un lote al grupo, el equipo suele incluir todos los nombres de usuario elegibles de los últimos X meses al intentar actualizar la membresía del grupo, lo cual es un proceso bastante engorroso.
Si realizas una llamada a la API a la ruta sync_sso que incluya el parámetro SSO add_groups, los usuarios existentes serán agregados al grupo. Si el usuario aún no tiene una cuenta de Discourse, se creará una cuenta para ellos y serán agregados al grupo. Puedes usar el parámetro SSO remove_groups de manera similar para eliminar usuarios de los grupos. Otra ventaja de usar la ruta sync_sso para esto es que no requiere que el usuario se cierre sesión y vuelva a entrar en Discourse para que el cambio surta efecto.
Si ver algún ejemplo de código PHP/WordPress sería útil para tu equipo, puedes ver esta implementación aquí: https://github.com/discourse/wp-discourse/blob/master/lib/utilities.php#L378. El archivo al que enlazo contiene algunas funciones de utilidad que los sitios pueden usar para extender el plugin WP Discourse. Esa es la razón por la que utiliza funciones estáticas.