Un CMS non sarebbe niente senza gli utenti che lo utilizzano ed i ruoli che per questi vengono impostati. Dato che ho notato più volte una vaga confusione su questo argomento, ho deciso di scrivere questo articolo per fare un po’ di chiarezza.
Sono sicuro che le prime volte che hai iniziato ad utilizzare questa piattaforma anche a te ti è importato poco di sapere che in WordPress possono collaborare tra loro diversi utenti, e che ci sono dei ruoli che ne definiscono le azioni che possono svolgere.
Lo so, conosco molto bene questa sensazione. Appena ci viene consegnato nelle mani un nuovo giocattolo non vediamo l’ora di provarlo e di smontarlo in mille pezzetti; chi perde più tempo a leggere il libretto delle istruzioni?!?
Forse sarò invecchiato male (e questo non lo metto in dubbio), ma man mano che gli anni sono passati ho iniziato sempre di più ad avere un certo rispetto nei confronti dei nuovi giocattoli. Specialmente con questa piattaforma mi sono interessato, sempre con più attenzione, alla sua struttura e mi sono dedicato alla scoperta delle caratteristiche che compongono WordPress.
I contenuti che troverai all’interno di questo articolo ti permetteranno di conoscere meglio questa piattaforma e troverai interessanti spunti che ti permetteranno di creare un WordPress più sicuro.
Ebbene sì, hai letto proprio bene; conoscere i concetti che verranno presentati in questo articolo ti permetteranno di usare (e di far usare) WordPress in modo più sicuro, cosa che ti permetterà di ridurre le chiamate di clienti presi dal panico perché non riescono a vedere il loro adorato sito.
Cerchiamo subito di fare chiarezza su una cosa, in WordPress esistono utenti e ruoli. Capire il primo gruppo è semplice, sono tutte le persone che in un modo o in un altro si sono iscritte all’interno della propria piattaforma; i secondi, invece, è bene conoscere nel dettaglio…
Questa può sembrare una guida molto discorsiva ma se leggerai abbastanza ti assicuro che entro la fine dell’articolo sarai in grado di definire le tue utenze personalizzate.
I Ruoli Standard in WordPress
Come dicevo prima, gli utenti sono le persone che interagiscono con il nostro sito, ma se questi avessero tutti gli stessi poteri potrebbero fare molti danni rendendo la nostra installazione inutilizzabile o, peggio ancora, irrecuperabile.
Adesso che hai un sistema pronto al recupero possiamo andare avanti più tranquillamente. Cerchiamo quindi di capire che cosa sono questi ruoli e perché sono così utili a WordPress.
Ebbene, come ormai dovresti sapere, un computer non è una macchina intelligente e ha sempre bisogno di sapere chi è a fare cosa e se ha i poteri per farlo; come puoi vedere non è neanche in grado di ricordarsi la persona che è appena entrata nel suo sistema!
Per capire queste cose devi sapere che WordPress farà fede a queste due strutture: i ruoli e le capacità dell’utente (d’ora in poi userò capability che fa molto più figo 😉 ).
Nella logica di questa piattaforma, un ruolo non è altro che un nome che contiene al suo interno un insieme di capability, niente di più, niente di meno. Il fatto è che esistono dei ruoli che hanno delle capability ben definite e che in WordPress si sono meritati dei nomi standard:
- Administrator – questo è l’utente più forte di tutti. A seconda di come gli gira può decidere se aggiornare la piattaforma o farla scomparire completamente;
- Editor – se l’Administrator è in grado di fare tutto, un editor ha tutti i poteri che riguardano l’editoria. In poche parole può decidere di pubblicare qualsiasi articolo e al tempo stesso può anche modificare gli articoli di qualsiasi autore;
- Author – un autore può modificare e pubblicare i propri articoli ma non potrà modificare o pubblicare quelli degli altri;
- Contributor – gli utenti ai quali è assegnato questo ruolo potranno scrivere i propri articoli ma per pubblicarli dovranno attendere la decisione di un editor;
- Subscriber – ed eccoci arrivati all’ultimo anello della catena, l’utente che ha meno poteri di tutti e che, al massimo, può fare il login all’interno della piattaforma ma, a parte modificare il proprio peofilo, può fare ben poco.
Come puoi notare l’organigramma di WordPress è già abbastanza solido e, se posso condividere con te qualche consiglio, ti suggerisco come minimo di creare un account con ruolo Editor al quale assegnare la creazione e la pubblicazione dei tuoi contenuti perché, così facendo, gli hacker che tenteranno di ottenere l’accesso tramite questo utente non potranno fare troppi danni.
Le azioni che può compiere un qualsiasi utente sono definite grazie alle capability, abbiamo visto che quelle più comuni vengono raccolte all’interno dei ruoli ma come fare per aggiungerne o rimuoverne?
Come creare la tua prima capability
Adesso dovrebbe essere ormai chiaro che un ruolo non è altro che un insieme di capability quindi, prima di andare a scoprire come sia possibile creare uno di questi elementi, mi sembra doveroso descrivere come sia possibile aggiungere o rimuovere quelli che lo compongono.
Per farla semplice, una capability non è altro che quello che può fare un utente all’interno di WordPress. Vogliamo dargli soltanto la possibilità di leggere (come accade per gli utenti Subscriber)?
L’unica capability che dovremmo assegnarli è read
.
Desideriamo che un utente in particolare sia anche in grado di installare e disinstallare temi? Allora dovremmo assegnarli le capability install_themes
ed edit_themes
.
Ovviamente potrei andare avanti in questo modo a lungo e probabilmente questo articolo supererebbe tranquillamente le 10000 parole ma dato che questo non è il mio scopo, ti lascio consultare l’ottima sezione relativa a questo argomento presente all’interno del Codex WordPress.
Adesso che dovrebbe essere chiaro che cosa permettono di impostare le capability, entriamo nella parte divertende dell’articolo ed andiamo a scoprire come sia possibile aggiungere (e creare allo stesso tempo) una per un determinato ruolo o per un determinato utente.
//Per Ruolo function aggiungi_capability() { // prendo il ruolo author $ruolo = get_role( 'author' ); //Aggiungo la mia Capability $role->add_cap( 'aggiungi_prodotto' ); } add_action( 'admin_init', 'aggiungi_capability'); //Per Utente $user = new WP_User( $user_id ); $user->add_cap( 'can_edit_posts');
Come puoi notare tu stesso, le pratiche per aggiungere una capability differiscono leggermente quando vogliamo farlo su un ruolo oppure su un singolo utente .
Se nel primo caso abbiamo bisogno di un Action Hook (precisamente di admin_init
) che ci permetta di richiamare il ruolo author
, nel secondo l’unica cosa di cui abbiamo bisogno è conoscere l’ID dell’utente per il quale desideriamo aggiungere una capability.
Dal codice si può anche notare quanto sia semplice creare una capability personalizzata, infatti, tutto quello che dovrai fare è scrivere la capability che vogliamo creare (che nel codice sarebbe aggiungi_prodotto
) ed il gioco è fatto; d’ora in avanti il ruolo author porterà con se questa impostazione.
É importante capire che, se creiamo una capability personalizzata, questa non fa assolutamente niente! Sarai tu che con il tuo codice dovrai controllare se il ruolo (o l’utente) la possiede e in base a questo permettergli di fare le azioni che hai sviluppato all’interno del tuo plugin.
Passiamo ai ruoli
Come abbiamo già visto, un ruolo è un insieme di capability che permettono all’utente di accedere a determinate impostazioni o di eseguire particolari azioni che sono state definite dal tuo plugin. Detto in questo modo sembra ancora un po’ astratto il concetto, non è vero?
Per rendere il tutto più semplice facciamo un esempio concreto. Molto probabilmente conosci già il plugin WooCommerce che permette di creare in pochi click il tuo eCommerce; questo non fa altro che aggiungere dei Custom Post Type e crea allo stesso tempo dei ruoli e capability dedicate alla gestione dei negozi.
Appena installato, il ruolo creato prende il nome di Shop Manager e come possiamo aspettarci permetterà all’utente con questo ruolo di gestire il proprio negozio. Per fare questo, WooCommerce crea anche delle capability e giusto per dare qualche esempio queste sono: edit_product
, delete_shop_coupon_terms
oppure read_shop_order
.
//Crea un Ruolo Personalizzato $aggiungi_ruolo = add_role( 'shop_manager', __( 'Shop Manager' ), array( 'edit_product' => true, // true ci attiva la capability 'delete_shop_coupon_terms' => true, 'read_shop_order' => false, // false la disattiva ) );
Questa è una versione molto semplificata del codice utilizzato da WooCommerce durante la sua installazione. Come ormai ci ha abituato WordPress i parametri accettati dalla funzione add_role()
sono molto semplici:
- il primo elemento rappresenta lo slug (o abbreviazione per noi italiani) e ci permette di creare un nome umano per richiamare successivamente il ruolo creato;
- in seguito abbiamo la possibilità di inserire una stringa di testo che identificherà il nome che l’utente potrà leggere all’interno del proprio backend;
- ultimo, ma non per importanza, troviamo la lista di capability da assegnare al ruolo che stiamo creando.
Ecco che ti ho svelato come potrai creare dei ruoli personalizzati da utilizzare all’interno dei tuoi plugin, prima di andare a vedere come sia possibile controllare se un utente ha o meno un determinato ruolo o capability, cerchiamo di capire come assegnarlo a un utente esistente all’interno della propria installazione WordPress.
Per fare questo bisogna usare la funzione wp_update_user()
che si può usare nel metodo che ti descrivo qua sotto (se hai bisogno di maggiori informazioni su questa funzione, non esitare a consultare il Codex WordPress):
//Aggiungi un Ruolo ad un Utente $user_id = 3; $ruolo = 'shop_manager'; $user_id = wp_update_user( array( 'ID' => $user_id, 'role' => $ruolo ) );
E questo per quando vogliamo assegnare un ruolo ad un utente già esistente, ma se desideri assegnare un ruolo particolare durante la creazione di un utente puoi procedere in due modi diversi:
- il primo, e più semplice, è quello di creare il nuovo utente utilizzando le funzionalità interne del nostro backend, ma è poco pratica quando stiamo lavorando con il codice…
- per questo puoi assegnare il ruolo con il tuo codice PHP usando la funzione `wp_insert_user()` e specificando il ruolo durante la sua creazione.
Ancora una volta ti lascio approfondire gli argomenti consultando la pagina del Codex creata appositamente.
Controlla Ruoli e Capability
Siamo quasi alla fine di questo articolo ma dopo tutto questo tempo che ho passato a mostrarti come creare e modificare capability e ruoli mi sembra più che necessario mostrare anche come sia possibile controllare che l’utente che sta cercando di eseguire una determinata operazione abbia le competenze per farlo.
Anche perché, altrimenti, non ci sarebbe stato il motivo di creare ruoli e capability 😉
Diciamo quindi che vogliamo controllare che l’utente che al momento è loggato può modificare gli articoli di altre persone, come fare? Ecco un piccolo ma utilissimo codice che presenta la funzione current_user_can()
:
//Controlla la capability di un utente loggato if( current_user_can('edit_others_posts') ){ echo "Puoi modificare gli articoli degli altri"; }
Questo codice è incredibilmente utile se vogliamo scoprire, o limitare, che cosa è in grado di fare un determinato utente e riprendendo i discorsi iniziali sulla sicurezza, ci permette anche di limitare i danni che gli utenti meno esperti possono fare al nostro WordPress.
Ma come fare se voglio creare un codice che mi permette di controllare le capability di un utente che non è loggato? Puoi risolvere usando questo semplice codice:
//Controlla un dato utente if ( user_can( 6, 'edit_others_posts' ) ) { // Fai qualcosa }
Ovvero devi usare la funzione user_can()
e passare come primo parametro l’ID dell’utente stesso e come secondo la capability che vogliamo controllare. Come sempre ti lascio la pagina del Codex dove questa funzione è spiegata per bene.
Conclusioni
Siamo giunti alla fine di questo articolo dove ti ho spiegato tutto quello che c’è da sapere riguardo agli utenti presenti nella tua installazione WordPress. Nell’articolo abbiamo parlato di molta teoria, in effetti tutti questi concetti lasciati da soli non hanno una grande ragione di esistere…
Ma ho scelto di pubblicarlo comunque perché ritengo che siano dei concetti più che utili da conoscere e padroneggiare se vuoi diventare uno sviluppatore esperto; e poi non dimenticarti che potremmo tornare a fare riferimento a queste pagine in futuro, quando svilupperemo qualcosa di ancor più interessante!
Io ho detto tutto quello che avevo da dire, se l’articolo ti è piaciuto non esitare a condividerlo e se non hai capito qualcosa non esitare a chiedere; semplice vero?
Salve volevo sapere è possibile eliminare dei ruoli creati da un plugin che avevo precedentemente installato?
Se si come posso fare?
Grazie di tutto.
Ciao Alfonso,
per risolvere il problema di cui parli hai principalmente due strade: quella dello sviluppatore (1) o installando un plugin (2).
1. Nel primo caso dovrai aprire il file
functions.php
presente nel tuo tema attivo (se non presente creane uno) e inserire al suo interno il seguente codice:$wp_roles = new WP_Roles(); $wp_roles->remove_role("ruolo_da_eliminare")
Una volta aggiornata la pagina della tua installazione assicurati che il ruolo sia stato rimosso. Se questo è avvenuto potrai rimuovere tranquillamente il codice appena aggiunto dato che non ti servirà più, assicurati però di sostituire la stringa “ruolo_da_eliminare” con il nome del ruolo che, appunto, desideri eliminare.
2. Un modo per fare la stessa operazione, ma che non ti richiederà di usare il codice, è attraverso il plugin Members di Justin Tadlock che ti permetterà di vedere nel pannello di amministrazione WordPress la lista di tutti i ruoli che sono presenti e ti permetterà di eliminare quelli non desiderati.
Spero di averti aiutato a risolvere il tuo dubbio, a presto.
Andrea