Ok, finalmente ho una versione in lavorazione da condividere qui
Alcune note.
Per l’implementazione iniziale ho scelto il caso leggermente più complesso dei gruppi hd di Google Apps, poiché ritengo che aiuti a considerare tutte le possibili combinazioni, ad esempio la necessità di gestire gruppi specifici di dominio provenienti da un provider.
Per implementare questo caso d’uso, ho dovuto introdurre un nuovo concetto di “autorizzazione secondaria” al momento dell’autenticazione, per consentire un’autorizzazione incrementale. Ho valutato diverse modalità per richiedere le autorizzazioni di gruppo specifiche di un utente (ovvero se si sta autenticando con un hd), e questa mi è sembrata la più fattibile. Riconosco che si tratta forse di un cambiamento più significativo del previsto in questo ambito, ma potrebbe valere la pena discuterne.
Si noti che per implementare il caso dei gruppi hd di Google è necessario concedere ai membri non amministratori dei gruppi hd di Google Apps l’autorità di amministratore delegato per elencare i propri gruppi (tramite l’API directory amministrativa). Esiste effettivamente un ruolo predefinito di amministratore “beta” chiamato “Lettore di gruppi” che funziona bene per questo scopo. Vedere Prebuilt administrator roles | User management | Google Workspace Help
L’implementazione di Google funziona. Se la configurate e poi vi autenticate con un hd, i vostri gruppi hd di Google saranno disponibili nelle impostazioni di appartenenza automatica ai gruppi; sarete aggiunti a quel gruppo Discourse se quel gruppo hd viene selezionato, rimossi se viene rimosso (entrambe le azioni vengono registrate con un certo grado di dettaglio) e gli utenti successivi in quel gruppo hd di Google che si autenticano verranno aggiunti immediatamente.
I dettagli dovrebbero essere evidenti dal codice e dai test. Noterete anche che ho finito per aggiungere tre nuove tabelle. Ho tentato alcune soluzioni più “leggere”, ma ciascuna si è rivelata più contorta e inefficiente quando si trattava di gestire gli aggiornamenti dei gruppi associati a un utente e dei gruppi associati a un gruppo. È difficile evitare di creare nuove tabelle per ciascuno. Sono aperto a idee sul fronte della modellazione dei dati, e più in generale.
Alcuni task tecnici rimasti (a parte le domande concettuali/di prodotto sollevate sopra). Anche su questo fronte sono benvenute le suggerimenti:
- Forse serializzare l’attributo
labeldi associated_groups (invece di modellarlo sul client). - Aggiungere i test mancanti e i qunit.
- Forse spostare la creazione/distruzione di user_associated_group / group_associated_group in un job in background, poiché con un gran numero di elementi potrebbe essere lento.