Cos’è una capability di WordPress

Il concetto di capability è il “cuore” della gestione degli accessi di WordPress in quanto definisce letteralmente ciò che l’utente può o non può fare. La documentazione ufficiale di WordPress descrive la capacità come il permesso di eseguire uno o più tipi di attività e ogni utente autenticato può avere almeno una capacità assegnata direttamente o ereditata da un ruolo genitore.

L’elenco di tutte le capacità standard per il core di WordPress può essere trovato nell’articolo Roles and Capabilities.

Mentre la maggior parte delle capacità sono autoesplicative in base al loro nome (edit_posts, manage_options, remove_users ecc.), c’è ancora molta confusione associata a ciò di cui sono effettivamente responsabili e perché anche quando l’utente ha una certa capacità assegnata, lui o lei non è ancora autorizzato a eseguire i compiti previsti.

Non c’è una buona risposta a questa domanda in quanto molte capacità di WordPress hanno eccezioni. Per esempio, quando il sito è impostato su più siti e l’utente non è un super amministratore, anche se la capacità create_users è concessa, l’utente non sarà ancora in grado di creare un nuovo utente; o la capacità manage_links sarà ignorata se l’opzione link_manager_enabled è disattivata.

Basandosi sulla versione di WordPress 4.9 ci sono almeno 65 eccezioni definite nel core, quindi non esitate a contattarmi se avete difficoltà con la gestione delle capacità.

Tutte le capacità basate sui ruoli sono memorizzate nella tabella wp_options con nome opzione wp_user_roles mentre le capacità basate sugli utenti sono memorizzate nella tabella wp_usermeta con nome meta chiave wp_capabilities. Il prefisso wp_ può variare in base al valore nella variabile globale $table_prefix definita nel file wp-config.php.

L’elenco delle capacità è l’array associato dove la chiave dell’elemento è la capacità stessa mentre il valore dell’elemento è la regola che definisce se la capacità è concessa o negata (1 significa che la capacità è concessa mentre 0 – negata).

Elenco delle capacità di WordPress

WordPress ha la funzione core current_user_can che è usata per controllare se l’utente attualmente loggato ha certe capacità, tuttavia la funzione innesca una funzionalità abbastanza complessa che in alcuni casi può restituire risultati inaspettati. Tutto dipende da quanti plugin attivi o temi si agganciano alla funzione current_user_can.

Come è stato menzionato sopra, alcune capacità hanno eccezioni che sono definite programmaticamente nella funzione map_meta_cap. Inoltre qualsiasi soluzione di terze parti può agganciarsi al processo con il filtro user_has_cap e sovrascrivere il risultato.

La capacità è considerata concessa se la regola non contiene un valore vuoto.

Nota bene! Dal 2011 ho sperimentato personalmente solo pochi casi in cui altri plugin si sono agganciati erroneamente alla funzione current_user_can. Quindi se qualcosa non funziona come previsto è meno probabile che sia legato a qualche plugin o tema, ma piuttosto alla perdita di conoscenza nelle eccezioni di capacità.

Come funziona effettivamente la capacità?

La capacità stessa è inutile, a meno che non sia referenziata nel codice. Tecnicamente significa che per far funzionare una capacità, da qualche parte nel codice, ci dovrebbe essere un controllo programmatico se l’utente autenticato ha una capacità specifica o no. Questo spetta allo sviluppatore per definire quale parte del sito web (di funzionalità) è protetta con quale capacità.

Nota! Non tutto in WordPress ha una capacità associata. Per esempio non troverete una capacità che sia responsabile di mostrare o nascondere la ricerca dei post sopra la lista dei post sul Backend o anche una capacità che limiti l’accesso al backend.

Per imparare a limitare l’accesso all’intera area di backend per gli utenti autenticati, controlla l’articolo How to lockdown WordPress backend.

Fortunatamente molte personalizzazioni possono essere realizzate con gli hook nativi di WordPress ma questo richiede uno sviluppo personalizzato. Per maggiori informazioni sugli hooks di WordPress controllate l’articolo Cos’è l’hook di WordPress.

Puoi creare una capacità personalizzata?

Vari plugin o temi aggiungono capacità personalizzate al core di WordPress o memorizzandole nel database o registrandole dinamicamente durante il caricamento del sito. È difficile dire quale sia il modo corretto, tuttavia è molto più difficile gestire l’accesso a un sito web con capacità aggiunte dinamicamente perché solo certi plugin o temi ne sono a conoscenza e controllano quando vengono registrati.

Le capacità aggiunte dinamicamente sono tipicamente registrate con l’init hook modificando la proprietà pubblica get_current_user()->allcaps.

Con il plugin AAM avete tutta la serie di strumenti necessari per gestire l’accesso alle funzionalità del sito WordPress per ruoli o anche singoli utenti. Per ulteriori informazioni su questo, si prega di fare riferimento all’articolo Come gestire le capacità di WordPress.

Conclusione

Le capacità di WordPress definiscono ciò che gli utenti possono o non possono fare all’interno del sito web. In genere sono progettate più per i compiti di backend e raramente usate per le funzionalità di frontend.

La capacità stessa è inutile se non è supportata nel codice. Quindi, se non hai familiarità con la codifica PHP, per favore consulta il tuo sviluppatore o semplicemente contattami prima di considerare di creare qualsiasi capacità personalizzata.