[Liferay5] Problema cancellazione utente/i da pannello di controllo

Mi è capitato un bug nella cancellazione degli utenti da pannello di controllo di Liferay. La versione incriminata è la 5.2.3. Il sistema ha creato in maniera errata alcuni account utente in fase di registrazione ed, evidentemente, alcune informazioni erano vitali per poter ricercare tali utenze da pannello di controllo, ed eseguire su di essi operazioni di modifica o cancellazione.

Probabilmente, il motivo di errata registrazione era dovuto ad una gestione non transazionale della creazione degli utenti in fase di autenticazione (è stata modificata la classe LoginUtil di Liferay, chiamando un WerbService per recuperare le informazioni di un utente registrato e memorizzando l’account sul db di Liferay, associandolo a gruppi e ruoli predefiniti).

Qualcosa in questi passi suddetti è andato storto, magari per un eccessivo carico di accessi al sistema. Fatto sta che alcuni account contenevano informazioni incomplete (utenze non associate a gruppi/ruoli, dettagli personali non aggiornati, … ) e non erano ricercabili dal quadro di controllo di Liferay e, dunque, nemmeno modificabili o cancellabili. Dopo averci sbattuto la testa e avendo provato diverse strade, la questione si è risolta con la soluzione che sto qui a dirvi, ossia con una cancellazione forzata con uno script SQL sulle tabelle di sistema di Liferay.

Da premettere che la cancellazione di questi account “corrotti” è stata necessaria per permettere a tali utenti di poter accedere al sistema con le proprie credenziali di posta. Liferay riconosce come già registrato al sistema un utente in base alla sua email (o screenName).

So che non è consigliabile mettere le mani sul db di Liferay, ma a mali estremi, estremi rimedi. Non potendo risolvere altrimenti (primo tentativo fatto con una portlet che richiamava le API di Liferay per la cancellazione di un utente – UserLocalServiceUtil.deleteUser(long idUser) – che ha funzionato solo per alcuni utenti), è stato indispensabile ed inevitabile cancellare con una query secca gli account corrotti.

Vi allego la procedura SQL creata (utilizzata su MySQL), che si può adattare anche ad altri DBMS. La soluzione è stata trovata nel forum di Liferay, di cui allego il link in fondo a questo articolo, ma modificando lo script SQL facendo delle cancellazioni puntuali sugli account corrotti e non sui record “orfani” che non trovano un riferimento (idUser) nella tabella User_. Usando, infatti, questa ultima soluzione (segnalata appunto nel post anzidetto), venivano cancellate una serie di informazioni vitali per il corretto funzionamento del sistema.

Ecco come si è proceduto per la cancellazione degli account utente “corrotti” dallo schema di Liferay, con una transazione SQL,:

  1. creazione di una tabella di appoggio (l’abbiamo chiamata USERS_TO_DELETE) in cui abbiamo elencato gli ID degli account da cancellare. Questi ID non sono altro che quelli che si recuperano dalla tabella User_ (colonna userID);
  2. creazione dello procedura SQL che elimina prima tutti record corrispondenti agli ID enumerati al punto 1 dalla tabella User_ e, successivamente, tutti i riferimenti agli stessi nelle altre tabelle di sistema di Liferay;
  3. Nello script SQL è stato mappato staticamente l’id di sistema del model “com.liferay.portal.model.User” (ID=10039 preso dalla tabella ClassName_);
  4. A questo punto, basta lanciare la procedura, a server spento!
  5. Dopo aver riavviato il server di Liferay, basta lanciare da pannello di amministrazione la funzionalità di svuotamento della cache del database (Quadro di controllo >> Gestione del server >> Svuota la cache del database).

Seguendo i precedenti passi, gli account che vogliamo eliminare, con tutte le informazioni correlate, vengono cancellati (in modo definitivo) dal sistema. Importante è l’operazione di svuotamento della cache del database, poiché mi è capitato di veder “magicamente” ricomparire un account cancellato!

Vi allego la procedura SQL e una serie di riferimenti usati per risolvere il problema.

Allegati

Procedura SQL Delete Users Liferay
Titolo: Procedura SQL Delete Users Liferay (0 click)
Etichetta:
Filename: procedure_delete_users_liferay.zip
Dimensione: 1 kB

Vi consiglio di leggere anche:

2 pensieri su “[Liferay5] Problema cancellazione utente/i da pannello di controllo

    • Si Domenico. Ci ho sbattuto la “capoccia” per un pò di giorni. Ma appena cancelli qualcosa da una tabella di Liferay, lasciando riferimenti in un’altra, succede un casino. Inoltre, mi è anche capitato che alcuni dati venivano “cashati”: praticamente, eliminavo un utente dalla tabella Users e, dopo un pò, me lo ritrovavo O_o

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


6 − = uno