Las comunidades de Discourse a menudo necesitan automatizar las membresías de grupos basadas en condiciones como la propiedad de insignias o las membresías de grupos existentes.
Los casos de uso comunes incluyen:
Usuarios que no están en el grupo ‘suscriptores’
Usuarios que no tienen prohibido publicar en Marketplace
Usuarios en TL0 o TL1, pero no en TL2
Usuarios que han completado el tutorial para nuevos usuarios o han sido miembros durante más de un año
Usuarios que pertenecen a client_1, client_2 o client_3 y no son becarios
Anteriormente, resolver esto requería scripts personalizados que sincronizaban periódicamente los grupos. El plugin Dynamic Groups elimina esa necesidad.
Este plugin introduce un campo de expresión booleana en la configuración del grupo, lo que permite a los administradores definir reglas que determinan dinámicamente la membresía del grupo.
Ejemplos:
usuarios que no están en el grupo ‘suscriptores’ trust_level_0 AND NOT subscribers
usuarios que no tienen prohibido publicar en Marketplace trust_level_2 AND NOT banned_users
usuarios que están en TL0 o TL1 pero no en TL2 trust_level_0 AND NOT trust_level_2
usuarios que completaron el tutorial para nuevos usuarios o son miembros desde hace más de un año badge:certified OR badge:anniversary
usuarios que pertenecen a los clientes 1, 2 o 3 y no son becarios (client_1 OR client_2 OR client_3) AND NOT interns
Configuración
Una vez que el plugin esté instalado y habilitado, aparecerá una nueva pestaña en la interfaz de administración de grupos:
Cuando ingrese o actualice la expresión booleana, el sistema tardará unos momentos en poblar el grupo con los usuarios coincidentes. A partir de ese momento, la membresía del grupo se actualizará automáticamente a medida que cambie el estado del usuario.
Importante:
Cuando se define una regla, el grupo se marca como automático, lo que deshabilita los cambios manuales de miembros. Para revertir el grupo a la gestión manual, simplemente borre el campo de expresión. Los miembros existentes permanecerán y recuperará el control manual.
Hola, ¡gracias por desarrollar este plugin tan útil!
Actualmente estoy usando Discourse Dynamic Groups para añadir automáticamente todos los usuarios no anónimos a un grupo especial. Mi expresión booleana es:
NOT anonymous_users
Comportamiento esperado:
Cuando un nuevo usuario se registra (que no pertenece al grupo anonymous_users), debería ser añadido automáticamente a este grupo, sin ninguna intervención manual.
Comportamiento real:
Los usuarios recién registrados no se añaden inmediatamente al grupo. Solo se añaden después de que yo vuelva a guardar manualmente la expresión booleana en la configuración del grupo.
Esto significa que el grupo no se actualiza automáticamente a medida que los usuarios se unen, a menos que yo active una sincronización manual.
Recibo el error: Palabra clave, grupo o insignia desconocida: 'anonymous_users'
Si cambio el nombre del grupo a mi grupo real, por ejemplo:
trust_level_0 AND NOT interns
Aún recibo: Palabra clave, grupo o insignia desconocida: 'interns'
He verificado dos veces y estoy copiando el nombre único del grupo directamente desde la página de administración del grupo, así que no hay errores de escritura.
¿Hay algo que podría estar olvidando o hay algo más que necesito configurar para que los grupos personalizados sean reconocidos en la expresión?
Intentando reproducir, he identificado dos errores y uno de ellos probablemente te afectó. ¿Puedes actualizar el plugin a la última versión 59640f1 y ver si eso resuelve el problema?
El plugin todavía no gestiona muy bien el cambio de nombre de los grupos. Si cambias el nombre de un grupo, debes guardar las reglas de todos los grupos que dependen de él (simplemente introduce un espacio después de la expresión booleana y elimínalo de nuevo para habilitar el botón Guardar). Esto se abordará en una versión posterior.
Los usuarios con nivel de confianza 1 también son miembros del grupo de nivel de confianza 0. Por lo tanto, el comportamiento es el esperado. Podrías excluir al grupo de nivel de confianza 1 para obtener solo usuarios TL0. Similar al ejemplo de la primera publicación