Uno sguardo veloce alle tabelle Joomla ACL core
Nota: questo articolo si applica a Joomla 1.5
Creare del codice per inserire un nuovo utente in Joomla non è così facile come sembra. O meglio: è abbastanza semplice per chi conosce già il framework di Joomla e usa i metodi esistenti per creare un utente.
Ma come si fa a creare un utente da uno script esterno in PHP lavorando direttamente sulle tabelle del database? O ad aggiungere “a mano” un nuovo utente nel database?
Ho fatto recentemente qualche ricerca, e di seguito ecco ciò che ho appreso.
Elenco delle tabelle
Ci sono diverse tabelle relative a utenti, gruppi e permessi:
- #__core_acl_aro
- #__core_acl_aro_groups
- #__core_acl_aro_map
- #__core_acl_aro_sections
- #__core_acl_groups_aro_map
- #__users (ovviamente)
Cosa tralasciare …
Nell’utilizzo base, esistono alcune tabelle che non necessitano di attenzione quando si crea/cancella un utente. Eccole:
#__core_acl_aro_groups : tabella statica; contiene tutti i gruppi Joomla disponibili e, a meno che non abbiate in programma di creare gruppi multipli (in questo caso suggerisco l’ottima estensione Artof User di Andrew Eddie), non dovrebbe essere modificata.
#__core_acl_aro_map : ho controllato in molti siti Joomla e questa tabella risulta vuota. Penso di poter tranquillamente dedurre che non venga usata nell’utilizzo comune.
#__core_acl_aro_sections : tabella statica; contiene una sola sezione chiamata “users”. Immagino che la sua espansione possa essere collegata all’utilizzo della precedente tabella …acl_aro_map
… e cosa no
Ci sono tabelle che invece necessitano di attenzione:
#__users : naturalmente il primo passo dovrebbe essere quello di aggiungere il record in questa tabella.
#__core_acl_aro : in questa tabella viene creato un nuovo record ogni volta che si crea un nuovo utente. Per quanto ne so, l’id si autoincrementa, section_value è sempre “users”, order_value è sempre “0” e hidden è sempre “0”; quindi, aggiungere questa tabella è piuttosto semplice. In pratica c’è un record per ogni utente in #__users table.
#__core_acl_groups_aro_map : questo è il vero collegamento tra utenti e gruppi; l’unica precisazione è, anziché usare l’id della tabella #__users, viene utilizzato quello della tabella #__core_acl_aro (come abbiamo già detto, c’è una relazione univoca tra queste due tabelle).
Riassumendo
Quindi, ogni volta che vorrete inserire un nuovo utente, dovrete:
- aggiungere un record alla tabella *_users
- aggiungere un record alla tabella *_core_acl_aro che punti all’id della tabella *_users
- ottenere l’id del nuovo record inserito, come indicato al punto 2
- ottenere l’id del gruppo che si vuole utilizzare, da *_core_acl_aro_groups
- aggiungere un record a *_core_acl_groups_aro_map con l’id di cui al punto 3 e al punto 4
Facile, no?
Alessandro
Salve,
ho letto con interesse l’articolo. Putroppo, però, non c’è scritto come mettere in pratica i punti indicati al paragrafo “Riassumendo”. Potete darmi qualche chiarimento?
Grazie mille
Alessandro
Francesco
@Alessandro:
mi scuso in anticipo perchè questa risposta potrà sembrare antipatica, ma ritengo che sia la più adatta.
Le istruzioni riportate nella sezione “Riassumendo” sono già ridotte alle operazioni più basilari: se per te non risulta facile tradurle in istruzioni PHP, forse devi prima approfondire la programmazione PHP, in particolare per quanto riguarda la gestione delle tabelle.
Attenzione: l’articolo si riferisce alla creazione DA UNO SCRIPT ESTERNO. Se stiamo parlando della creazione o modifica di un componente per Joomla, quanto riportato nell’articolo non c’entra nulla.
Leonardo
mancherebbe un’indicazione: Joomla 1.5 o 1.7/2.5
Francesco
@Leonardo:
hai ragione. Tutto quanto riportato nell’articolo si riferisce a Joomla 1.5. In Joomla 2.5 la questione ACL cambia (è più potente, ma più complessa) e non sono in grado di assicurare che funzioni tutto allo stesso modo, anche se in teoria le tabelle principali dovrebbero essere le stesse.