Come limitare l'accesso del dashboard solo agli amministratori?


19

Come limiteremmo l'accesso all'area di amministrazione di WP a tutti gli utenti tranne gli amministratori?
Gli utenti sul nostro sito hanno le proprie pagine del profilo che svolgono tutte le funzioni di cui hanno bisogno.

Quindi l'amministratore dovrebbe essere off limits per tutti tranne gli amministratori.

Come farlo?


Vuoi dire che ci sono pagine utente "frontali" che non richiedono l'accesso a nulla che si trova su yourdomain.com/wp-admin ?
curtismchale

Si, esattamente. C'è qualcosa di sbagliato in questo?
Robin I Knight,

No, solo chiarendo.
curtismchale

Risposte:


19

Possiamo agganciarci admin_initall'azione e verificare se l'utente è un amministratore usando la current_user_can()funzione per vedere se l'utente attuale può manage_options, cosa che solo un amministratore può fare.

Questo codice, quando incollato nel tuo file Functions.php, visualizzerà un messaggio quando un non amministratore tenta di accedere alla dashboard:

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( 'You are not allowed to access this part of the site' ) );
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

Se preferisci, puoi fornire una migliore esperienza utente reindirizzando l'utente alla home page invece:

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_redirect( home_url() );
        exit;
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

Se desideri reindirizzare l'utente alla pagina del suo profilo, sostituisci home_url()il codice sopra con il link.


Questa risposta non soddisfa i requisiti della domanda. Innanzitutto, stai disabilitando l'accesso all'area di amministrazione a un utente con funzionalità "manage_options" e una funzionalità può essere assegnata a più ruoli, non solo all'amministratore. Inoltre, la funzionalità "manage_options" può essere rimossa dall'amministratore.
cybmeta,

Il controllo di @cybmeta per la manage_optionsfunzionalità è il modo accettato per verificare un utente amministratore. Anche Mark Jaquith lo dice
shea,

L'interrogante ha chiesto esattamente il controllo del ruolo dell'utente amministratore e penso che sia importante dargli la risposta esatta e spiegare quando e perché verificare la capacità può essere migliore. Dici che manage_optionsè qualcosa che solo gli "amministratori" possono fare e che non è vero, manage_optionsè una capacità e può essere rimosso dal ruolo di amministratore o assegnato ad altri ruoli utente. L'importante è sapere cosa vuoi fare e scegliere il modo migliore. Vedi la mia risposta, spiego questo.
cybmeta,

Signore, prendete un +1! :) Lo stavo cercando da ore! Anche un piccolo miglioramento. Singolo sito il tuo controllo è sufficiente. Per multi-sito che ci si vuole sostituire manage_optionscon manage_network. Quest'ultimo disabiliterebbe la dashboard anche per gli "amministratori del sito" predefiniti ma lascerebbe l'accesso disponibile per i Super amministratori (amministratori di rete).
rkeet,

Il problema principale con questa risposta è che si scontra con le chiamate Ajax. @cybmeta ha la risposta corretta di seguito.
RiotAct


9

Alcune delle risposte fornite possono andare bene nella maggior parte delle situazioni, ma penso che nessuna di esse sia garanzia di fare esattamente ciò che viene chiesto perché nessuna delle risposte controlla i ruoli degli utenti, controlla le capacità e le capacità possono essere assegnate e rimosse dai ruoli dei moduli. Pertanto, per fornire una risposta esatta, è necessario verificare i ruoli utente, non le funzionalità:

add_action( 'admin_init', 'allow_admin_area_to_admins_only');
function allow_admin_area_to_admins_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }

      $user = wp_get_current_user();

      if( empty( $user ) || !in_array( "administrator", (array) $user->roles ) ) {
           //Redirect to main page if no user or if the user has no "administrator" role assigned
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

Se vuoi verificare che l'utente abbia la capacità "manage_options", puoi farlo. In effetti, è l'opzione migliore nella maggior parte dei casi. Sebbene questa funzionalità sia associata per impostazione predefinita agli utenti amministratori, la funzionalità può essere rimossa dal ruolo di amministratore o può essere assegnata ad altri ruoli utente. Ecco perché, nella maggior parte dei casi, controllare ciò che l'utente può o non può fare è meglio che controllare il ruolo dell'utente. Quindi, nella maggior parte dei casi, il controllo delle capacità dovrebbe essere il modo scelto, ma devi chiarire questo concetto e scegliere l'opzione migliore per la tua situazione e scopo:

add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }


      if( ! current_user_can( "manage_options" ) ) {
           //Redirect to main page if the user has no "manage_options" capability
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

Questa è la risposta corretta Non si scontra con le chiamate Ajax.
RiotAct

3

Prova il plug-in Adminimize .
Puoi bloccare le cose abbastanza bene con quello.

Puoi anche provare a configurare l'accesso tramite il file htaccess


1
+1 per Amministra. Questa è una bestia di un plugin. Insieme ad alcuni plugin personalizzati per la gestione dei ruoli, è semplicemente incredibile. (Se mi scusi un'opinione personale) :::: Come ultima nota: si prega di fornire più informazioni che solo i collegamenti, rende la risposta più completa.
brasofilo,

2
function wpse_11244_restrict_admin() {
    if (!current_user_can('update_core')) {
        wp_die(__('You are not allowed to access this part of the site'));
    }
}

add_action('admin_init', 'wpse_11244_restrict_admin', 1);

4
'administrator'non è una capacità. Funziona solo per mantenere la retrocompatibilità. Controlla 'update_core'o altre funzionalità di amministrazione.
fuxia

Inoltre, è possibile assegnare funzionalità ai ruoli, quindi se si desidera consentire l'accesso all'utente "amministratore", è necessario verificare la presenza di ruoli, non di funzionalità.
cybmeta,

0

Inserisci queste righe nel tuo functions.php

function baw_no_admin_access()
{
 if( !current_user_can( 'administrator' ) ) {
     wp_redirect( home_url() );
     die();
  }
}
add_action( 'admin_init', 'baw_no_admin_access', 1 );

3
come @toscho ha detto che 'amministratore' non è una capacità, invece usa le funzionalità di amministrazione come 'update_core'
Pierre

0

Prova questo, mai attraverso errori di fronte a un utente finale. Contro una buona UX. Questo codice li reindirizza a Home.

    add_action( 'init', 'blockusers_init' );
function blockusers_init() {
if ( is_admin() && ! current_user_can( 'administrator' ) &&
! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
wp_redirect( home_url() );
exit;
}
}

-1

Vorrei utilizzare WP Frontend e impostarlo per tutti aspettarsi amministratori.


Fornisci maggiori informazioni, quindi un link - rende la risposta più completa
shea
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.