Ok, finalmente tengo un trabajo en progreso para compartir aquí
Algunas notas.
He optado por el caso ligeramente más complicado de los grupos hd de Google Apps para la implementación inicial, ya que creo que ayuda a reflexionar sobre las posibles permutaciones de esto, por ejemplo, la necesidad de tener en cuenta los grupos específicos de dominio de un proveedor.
Para implementar ese caso de uso, también he tenido que introducir un nuevo concepto de “autorización secundaria” en el punto de autenticación, para permitir una autorización incremental. Consideré varias formas diferentes de implementar la solicitud de permisos de grupo de usuarios específicos (es decir, si se estaban autenticando con un hd), y esto pareció ser la opción más viable. Aprecio que esto quizás sea un cambio mayor en ese sentido de lo anticipado, pero quizás valga la pena discutirlo.
Tenga en cuenta que para implementar el caso de los grupos hd de Google, debe otorgar a los miembros no administradores de sus grupos hd de Google Apps autoridad de administrador delegada para listar sus grupos (a través de la API de directorio de administración). De hecho, existe un rol de administrador predefinido “beta” llamado “Lector de grupos” que funciona bien para esto. Consulte Prebuilt administrator roles | User management | Google Workspace Help
La implementación de Google funciona. Si la configura y luego se autentica con un hd, sus grupos hd de Google estarán disponibles en la configuración de membresía de grupo automática; se le añadirá a ese grupo de Discourse si se selecciona ese grupo hd, se le eliminará si se elimina (ambas acciones se registrarán con cierta especificidad) y los usuarios subsiguientes de ese grupo hd de Google que se autentiquen se añadirán inmediatamente.
Los detalles deberían ser evidentes a partir del código y las pruebas. También notará que he terminado añadiendo tres nuevas tablas. Intenté algunas soluciones más “ligeras”, pero cada una terminó siendo más complicada e ineficiente a la hora de manejar las actualizaciones de los grupos asociados de un usuario y de los grupos asociados de un grupo. Es difícil evitar simplemente crear nuevas tablas para cada una. Estoy abierto a ideas en el frente del modelado de datos, y en general.
Algunas tareas técnicas pendientes (además de las preguntas conceptuales/de producto planteadas anteriormente). También se aceptan sugerencias en este sentido:
- Quizás serializar el
labelde associated_groups (en lugar de modelarlo en el cliente). - Añadir pruebas y qunits faltantes.
- Quizás mover la creación/destrucción de user_associated_group / group_associated_group a un trabajo en segundo plano, ya que con grandes cantidades esto podría ser lento.