Ok, finalmente tenho um trabalho em andamento para compartilhar aqui
Algumas observações.
Optei pelo caso um pouco mais complexo de grupos do Google Apps HD para a implementação inicial, pois acredito que isso ajuda a pensar nas possíveis permutações disso, como a necessidade de considerar grupos específicos de domínio de um provedor.
Para implementar esse caso de uso, também precisei introduzir um novo conceito de “autorização secundária” no momento da autenticação, para permitir autorização incremental. Considerei algumas maneiras diferentes de implementar a solicitação de permissões de grupo de usuários específicos (ou seja, se eles estivessem autenticando com um HD), e essa parecia ser a mais viável. Agradeço que isso talvez seja uma mudança maior nessa frente do que o antecipado, mas vale a pena discutir.
Observe que, para implementar o caso de grupos do Google HD, você precisa conceder aos membros não administradores dos seus grupos do Google Apps HD autoridade de administrador delegada para listar seus grupos (via a API de diretório de administração). Na verdade, há um papel de administrador pré-construído “beta” chamado “Leitor de Grupos” que funciona bem para isso. Veja Prebuilt administrator roles | User management | Google Workspace Help
A implementação do Google funciona. Se você configurá-la e depois autenticar com um HD, seus grupos do Google HD estarão disponíveis na configuração de associação automática de grupos; você será adicionado a esse grupo do Discourse se esse grupo do HD for selecionado, removido se for removido (com ambas as ações registradas com certa especificidade), e usuários subsequentes nesse grupo do Google HD que autenticarem serão adicionados imediatamente.
Os detalhes devem ser evidentes a partir do código e dos testes. Você também notará que acabei adicionando três novas tabelas. Tentei algumas soluções mais “leves”, mas cada uma acabou sendo mais complicada e ineficiente ao lidar com atualizações nos grupos associados de um usuário e nos grupos associados de um grupo. É difícil evitar simplesmente criar novas tabelas para cada caso. Estou aberto a ideias sobre modelagem de dados, no entanto, e de forma mais geral.
Algumas tarefas técnicas pendentes (além das questões conceituais/de produto levantadas acima). Sugestões também são bem-vindas nesse aspecto:
- Talvez serializar o
labelde associated_groups (em vez de modelar no cliente). - Adicionar testes e qunits faltantes.
- Talvez mover a criação/destruição de user_associated_group / group_associated_group para um job em segundo plano, pois com grandes números isso pode ser lento.