Rimuovere l'accesso a determinati menu di amministrazione

26 apr 2014, 16:12:06
Visualizzazioni: 22.5K
Voti: 3

Sto cercando di rimuovere alcune funzionalità di amministrazione per un utente con il ruolo di contributor. Con rimuovere alcune funzionalità di amministrazione intendo impedire la visualizzazione di determinate voci del menu amministrativo, come commenti, strumenti, media ecc. Sono riuscito a rimuovere gli elementi desiderati dal menu di amministrazione usando questo codice:

function remove_menus(){

$author = wp_get_current_user();
if(isset($author->roles[0])){ 
    $current_role = $author->roles[0];
}else{
    $current_role = 'no_role';
}

if($current_role == 'contributor'){  
  remove_menu_page( 'index.php' );                  //Dashboard
  remove_menu_page( 'edit.php' );                   //Articoli
  remove_menu_page( 'upload.php' );                 //Media
  remove_menu_page( 'tools.php' );                  //Strumenti
  remove_menu_page( 'edit-comments.php' );          //Commenti

}

}
add_action( 'admin_menu', 'remove_menus' );

Funziona perfettamente. Il problema che sto affrontando è che posso semplicemente aggiungere manualmente la query string all'URL, ad esempio /wp-admin/edit.php e questo mi porterà alla schermata di modifica degli articoli. Qualcuno sa come limitare completamente l'accesso a queste pagine, oltre a nasconderle dal menu di amministrazione?

4
Commenti

Cosa vuoi esattamente che questo utente possa fare? Sembra più che tu abbia bisogno di un ruolo personalizzato piuttosto che cercare di modificare il ruolo del contributor nel modo in cui stai facendo.

s_ha_dum s_ha_dum
26 apr 2014 18:09:06

Voglio che l'utente possa modificare il proprio profilo e gestire i propri post di un custom post type. Non credo davvero di aver bisogno di un ruolo personalizzato, poiché quello del contributor fa già quello che mi serve. Ho solo bisogno di un modo per impedire la visualizzazione di alcune pagine nell'area di amministrazione. Se creo un ruolo personalizzato e gli do la possibilità di gestire i propri post, non si verificherebbe lo stesso problema?

RoseCoder RoseCoder
26 apr 2014 19:45:08

Come posso disabilitare l'accesso alle impostazioni di Woocommerce per un particolare tipo di utente?

MOSD MOSD
1 feb 2021 17:26:42

@MOSD non pubblicare una domanda come soluzione a un'altra domanda. So che non hai abbastanza reputazione per lasciare commenti alle domande altrui, ma questo non è una giustificazione, e verrai segnalato come spammer dal sistema anti-spam se continui

Tom J Nowell Tom J Nowell
1 feb 2021 18:03:29
Tutte le risposte alla domanda 4
1

Alla fine ho capito e questo è il codice che ho utilizzato:

function restrict_menus() {
    $author = wp_get_current_user();

    if( isset( $author->roles[0] ) ) { 
        $current_role = $author->roles[0];
    } else {
        $current_role = 'no_role';
    }

    if( 'contributor' == $current_role ) {  
        $screen = get_current_screen();
        $base   = $screen->id;

        if( 'edit-post' == $base || 'upload' == $base || 'tools' == $base || 'edit-comments' == $base ) {
            wp_die( 'Stai cercando di fare il furbo?' );
        }
    }
}
add_action( 'current_screen', 'restrict_menus' );
26 apr 2014 20:55:21
Commenti

è stato davvero utile, grazie per aver seguito con la tua soluzione

Snowball Snowball
14 apr 2016 09:16:26
0

So che questa domanda è già stata risposta ed è vecchia. Tuttavia, volevo fornire una soluzione alternativa. Ecco come l'ho implementata in un plugin che ho scritto tempo fa (ho modificato il mio codice per utilizzare le tue pagine).

Poiché vuoi limitare il ruolo del contributor, puoi utilizzare le capacità dei ruoli. I contributor non possono pubblicare post, quindi potresti fare quanto segue.

Parte 1: Rimuovere elementi dal menu di amministrazione

add_action( 'admin_menu', 'tcd_remove_admin_menus' );
function tcd_remove_admin_menus() {

    // non fare nulla se l'utente può pubblicare post
    if ( current_user_can( 'publish_posts' ) ) {
        return;
    }

    // rimuovi questi elementi dal menu di amministrazione
    remove_menu_page( 'edit.php' );          // Post
    remove_menu_page( 'upload.php' );        // Media
    remove_menu_page( 'tools.php' );         // Strumenti
    remove_menu_page( 'edit-comments.php' ); // Commenti

}

Come hai detto però, questo non impedisce all'utente di inserire direttamente l'URL della pagina. Ecco come ho implementato la restrizione delle pagine:

Parte 2: Limitare l'accesso alle pagine di amministrazione

add_action( 'current_screen', 'tcd_restrict_admin_pages' );
function tcd_restrict_admin_pages() {

    // non fare nulla se l'utente può pubblicare post
    if ( current_user_can( 'publish_posts' ) ) {
        return;
    }

    // recupera l'ID della pagina corrente
    $current_screen_id = get_current_screen()->id;

    // determina quali schermate sono vietate
    $restricted_screens = array(
        'edit',
        'upload',
        'tools',
        'edit-comments',
    );

    // Limita l'accesso alla pagina
    foreach ( $restricted_screens as $restricted_screen ) {

        // confronta l'ID della schermata corrente con ogni schermata vietata
        if ( $current_screen_id === $restricted_screen ) {
            wp_die( __( 'Non sei autorizzato ad accedere a questa pagina.', 'tcd' ) );
        }

    }

}

Per me, utilizzare le capacità dei ruoli e un array ha reso il tutto un po' più semplice da gestire. Comunque, spero che questo metodo sia utile.

Saluti.

16 mar 2017 00:21:47
0

Di solito utilizzo (e raccomando) il plugin Members. L'interfaccia utente è molto semplice da usare e hai il vantaggio aggiuntivo di memorizzare la logica dei ruoli/permessi nel database (piuttosto che nel codice), il che rende facili le modifiche "al volo".

Questo plugin ti permette persino di creare un ruolo personalizzato (magari vuoi inventarne uno chiamato "Editor di Foto" o "Approvatore di Commenti" ecc.) e limitare quali menu possono vedere e a cui possono accedere. Penso che faccia esattamente quello che desideri.

26 apr 2014 18:14:20
0

Potresti creare un ruolo personalizzato come suggerito da s_da_hum oppure rimuovere le capacità dal ruolo contributor aggiungendo questo codice al file functions.php del tuo child theme.

add_action( 'init', 'wpsites_remove_contributor_capabilities' );

function wpsites_remove_contributor_capabilities() {

$contributor = get_role( 'contributor' );

$caps = array(
    'edit_posts',
    'delete_posts',
);

foreach ( $caps as $cap ) {

    $contributor->remove_cap( $cap );
    }
}

Fonte https://codex.wordpress.org/Function_Reference/add_role

26 apr 2014 18:57:26