Condividere utenti tra più installazioni di Joomla

Eccoci arrivati ad un altro punto focale per chi necessita di sfruttare funzionalità avanzate: come condividere gli stessi utenti tra differenti installazioni di Joomla!

Descriviamo ora la procedura dedicata a chi necessiti di condividere utenti tra installazioni di Joomla!
Queste operazioni richiedono una buona conoscenza tecnica di MySql e dell'utilizzo di phpmyadmin, è consigliato effettuare un backup dei database prima di intervenire.

Come possiamo notare, le tabelle del database interessate sono:
  • jos_users
  • jos_core_acl_aro
  • jos_core_acl_groups_aro_map
che contengono le informazione per gestire utenti e gruppi correttamente.

Dove operare?

Possiamo immaginare che tutti coloro che allestiscono un sito con diversi sottodomini (it.miosito.com, de.miosito.com, ...) necessitino di immagazzinare gli utenti in un'unica struttura: immaginate che un italiano, registrato al sottodominio it., voglia accedere come registrato anche al sito tedesco (de.); senza condividere gli utenti, dovrebbe creare un nuovo account, nel 99% dei casi controvoglia, spendendo del tempo inutile.

Cenni preliminari

Dobbiamo semplicemente fare in modo che (nel nostro caso) la versione tedesco del sito, quando registra gli utenti, non li inserisca nelle reali 3 tabelle sopra descritte, ma le inserisca in quelle della versione italiana, e quando Joomla! va ad interpellare quelle 3 tabelle nel database del sito in tedesco, quelle tabelle "redirezionino" alle corrispettive italiane, facendo si che il db di Joomla! del sito italiano funga da aggregatore per tutti gli account: se, per esempio, volessimo un giorno aggiungere la lingua francese installando Joomla! in un sottodominio (fr.), dovremo semplicemente ripetere questa operazione.

Perchè operare così?

A nostra opinione, soprattutto su siti medio grandi, installare componenti per gestire il multilingua può risultare controproducente: per fare un esempio, basti pensare che Joom!Fish 2.0, stabile per Joomla! 1.5, è uscito un anno dopo l'uscita della nuova versione del CMS, impedendo di fatto la migrazione a molti siti.

Operando in questa maniera ci svincoliamo da componenti esterni e manteniamo ogni nostra installazione più pulita.

L'ambiente ottimale

Ci permettiamo di suggerirvi di utilizzare lo stesso host MySQL per effettuare questa operazione, in modo da non complicarci eccessivamente la vita. Queste operazioni possono essere effettuate solo su MySQL 5 o superiori.

Due database (it_db e de_db) sono sufficienti per le nostre due installazioni (anche se potremmo usarne uno solo, ma consigliamo, per alleggerire la stessa struttura dei database, di usarne due separati).

Come operare?

Da phpmyadmin o MySQLQueryBrowser cancelliamo le 3 tabelle sopra citate dall'installazione tedesca (quindi dal database de_db).

Una volta effettuata questa semplice operazione dobbiamo creare delle cosiddette 'viste' (view): esse servono a "convertire le query" per redirezionarle su un'altra tabella.

In soldoni, per recuperare un'utente, per esempio, se creiamo una vista, una query diviene:

recupera l'utente con ID = 62 dalla tabella X, ma la tabella X è una vista della tabella Y, quindi recupera l'utente dalla tabella Y

Come creare le viste?

Selezioniamo il database it_db, clicchiamo ( da phpmyadmin) sul pulsante "SQL" e inseriamo la seguente sintassi:

CREATE VIEW de_db.jos_users AS SELECT * FROM jos_users

a questo punto lanciamo la query.

Una volta lanciata ripetiamo l'operazione altre due volte, inserendo come sintassi:

CREATE VIEW de_db.jos_core_acl_aro AS SELECT * FROM jos_core_acl_aro

e

CREATE VIEW de_db.jos_core_acl_groups_aro_map AS SELECT * FROM jos_core_acl_groups_aro_map

Ovviamente dovremo, se il nostro database per l'installazione tedesca non si chiama de_db, cambiare i riferimenti nelle query sopracitate.

A questo punto avremo creato l'infrastruttura per la condivisione di utenti: se vi registrate su uno dei due siti, l'account verrà registrato anche sull'altro!

Scritto da Ternaria Informatica

P.S. Si ringrazia Saverio per aver insistito per condividere gli utenti sul proprio sito
CommentaCommenta questo articolo sul forum