
En aquest article t'explique com podem tenir el nostre Drupal actualitzat amb els usuaris existents de la base de dades de l'Active Directory de la nostra organització.
OBJECTIU
La gestió d'usuaris (altes, baixes i modificacions) i la gestió de projectes sempre és un tema important i, de vegades, complicat de gestionar. En la meua organització tenim més de 1.000 usuaris actius de diferents perfils en diversos projectes.
Fa temps vaig explicar com vaig importar usuaris (existents en la base de dades de l'Active Directory) a Drupal en l'article Important massivament un llistat de més de 1200 usuaris a Drupal. Després a Drupal hem configurat els usuaris amb diversos rols, depenent del projecte tenen un rol o un altre.
El problema és que cada setmana fem noves altes d'usuari a l'AD però aquestos nous usuaris no existeixen a Drupal. I si tornem a fer una importació global dels usuaris de l'Active Directory, actualtizarem tots els usuaris de Drupal però s'hauran esborrat les configuracions dels rols en els perfils dels usuaris i tots els perfils d'usuari estaran buits.
L'objectiu és tornar a fer una exportació dels usuaris de l'Active Directory, fer una exportació dels usuaris actuals de Drupal i importar, nomès, els nous usuaris que encara no existeixen a Drupal. D'aquesta manera ja tindrem incorporats els nous usuaris de l'AD en Drupal i com que el nostre projecte envia notificacions per correu electrònics als usuaris, ja podrem estar segur de que tots els usuaris han rebut les notificacions.
EXPORTEM ELS USUARIS ACTUALS DE DRUPAL
Començarem exportant els usuaris de Drupal. Ho farem creant una vista amb tots els noms d'usuaris, sense paginar ni res. I la configurarem en format taula:
Li direm que ens mostre 5.000 (actualment tenim 1.300 usuaris i així ens asegurem que la llista resultant no eixirà paginada):
I aquesta és la vista que anem a crear. Per últim configurem el nom de la ruta i ens la guardem:
I ara la fiquem, escrivint el nom de la nostra url amb eixa ruta, és a dir http://URL/exportacio-tots-els-usuaris, i veurem el llistat dels noms d'usuari existents al nostre Drupal:
Doncs bé, ara copiem eixe llistat i el peguem en un full de càlcul:
Guardarem els usuaris Drupal en format CSV amb el nom 1.csv:
Ara entrem en la terminal de PowerShell i exportarem tots els usuaris de l'Active Directory en un fitxer 2.csv amb el codi:
Get-ADUser -Filter * -SearchBase "OU=aytos,OU=NOM1, DC=NOM2,DC=NOM3" -Properties Mail | Select-Object SamAccountName, Mail | Export-Csv -Path "H:\2.csv" -NoTypeInformation -Encoding UTF8
I quedarà com es mostra a la següent captura de pantalla (he ocultat les dades sensibles de la meua organització per motius de seguretat):
I bé, ja tenim el fitxer amb els noms d'usuari exportats de Drupal 1.csv i també tenim el fitxer 2.csv amb tots els noms d'usuari i correus de l'Active Directory. I escriurem un script python (jo li he anomenat sincronitzacio.py):
Aquest script sincronitzacio.py compara els dos fitxers i generarà un nou fitxer, 3.csv amb els nous usuaris existents en l'Active Directory (2.csv) els quals no existeixen en la base de dades del Drupal. El codi d'aquest script és el següent:
# Programa python que genera un nou fitxer 3.csv amb els usuaris de l'Active Directory
# que encara no existeixen a la base de dades de Drupal.
import pandas as pd
#
# Llegir el fitxer 1 (només noms)
fitxer1 = pd.read_csv("1.csv", header=None, names=["Nom"])
#
# Llegir el fitxer 2 (noms i correus)
fitxer2 = pd.read_csv("2.csv")
#
# Filtrar els noms que no estan en el fitxer 1
fitxer_filtrat = fitxer2[~fitxer2["Nom"].isin(fitxer1["Nom"])]
#
# Guardar el resultat en un nou fitxer CSV
fitxer_filtrat.to_csv("3.csv", index=False)
Executarem l'script amb $ python3 ./sincronitzacio.py i obtindrem el nou fitxer 3.py amb els usuaris nous en Active Directory que encara no tenim a Drupal:
Podem obrir els tres fitxers CSV amb el full de càlcul i veurem que tenim ja clar el llistat dels usuaris actuals de Drupal, els usuaris actuals de l'Active Directory i, en el fitxer 3.csv, els nous usuaris que ens cal importar a Drupal:
Doncs bé, ja podem anar a la configuració d'usuaris del nostres projecte Drupal i, com que tenim el mòdul User CSV Import/ instal·lat, podem fer click sobre el botó "Import users from CSV:
Un exemple del fitxer CSV seria:
username, mail
joan, joan@xxx.com
pascualet, pascual@xxx.com
vicentet, vicentet@xxx.com
marieta, marieta@xxx.com
...
És a dir, cal anomenar a les dues columnes com username i mail.
No especificarem cap camp ni cap configuració, nomès volem importar-los en Drupal:
I bé, finalment ja tenim tots els nous usuaris de l'Active Directory importats al nostre projecte Drupal: