Plugin per rimuovere elementi del menu Admin in base al ruolo utente?

30 gen 2011, 02:19:58
Visualizzazioni: 29.2K
Voti: 6

Ho cercato ovunque un plugin che possa rimuovere/nascondere elementi del menu Admin, inclusi custom post type e tassonomie, in base al ruolo utente.

Tutti quelli che ho provato fanno solo un nascondimento globale, non basato sul ruolo utente. Altri più complessi come Adminize non mostrano i custom post type o le tassonomie.

Devo scrivere una funzione personalizzata o c'è un plugin semplice che mi sta sfuggendo?

1
Commenti

Prova questo plugin: Hide Admin Panels)

User User
31 mag 2011 20:39:10
Tutte le risposte alla domanda 4
2

Aggiornamento:

Rileggendo la risposta di Mike mi è venuto in mente che puoi aggiungere una nuova capability a un ruolo e usarla come condizione per la rimozione, quindi:

   // prima aggiungi la capability al tuo ruolo in questo modo
   // ottieni l'oggetto ruolo "author"
   $role = get_role( 'administrator' );

   // aggiungi "see_all_menus" a questo oggetto ruolo
   $role->add_cap( 'see_all_menus' );

   // poi rimuovi le voci di menu in base a quella capability
   function remove_those_menu_items( $menu_order ){
            global $menu;
            // verifica usando la nuova capability con current_user_can
            if ( !current_user_can( 'see_all_menus' ) {
             foreach ( $menu as $mkey => $m ) {
                //nome del custom post type "portfolio"
                $key = array_search( 'edit.php?post_type=portfolio', $m );
                //menu pagine
                $keyB = array_search( 'edit.php?post_type=page', $m );
                //menu articoli
                $keyC = array_search( 'edit.php', $m );

                if ( $key || $keyB || $keyC )
                    unset( $menu[$mkey] );
             }
            }
            return $menu_order;
    }

 //Infine collega la funzione a "menu_order"
        add_filter( 'menu_order', 'remove_those_menu_items' );

Vecchia risposta

Sono completamente d'accordo con quanto postato da Mike ma se non sei pronto per scrivere codice personalizzato Dai un'occhiata al plugin Admin Menu Editor.

Ti permette di impostare i diritti di accesso per livello.

30 gen 2011 02:55:26
Commenti

Ho provato questo ma la funzione di nascondere sembra essere un'impostazione globale, è attiva/disattiva, nessun controllo basato sul ruolo utente.

Wyck Wyck
30 gen 2011 07:18:21

Ok, nuovo approccio, ho aggiornato la mia risposta.

Bainternet Bainternet
30 gen 2011 11:49:00
0

C'è un plugin creato appositamente per questa esigenza: Hide Admin Menu. Questo plugin può:

  • Nascondere le voci del menu di amministrazione in base al ruolo dell'utente, inclusi Amministratori e ruoli personalizzati
  • Può nascondere anche le voci della barra di amministrazione
  • Permette di esportare/importare le impostazioni per utilizzarle su altri siti

Un altro aspetto positivo di questo plugin è che è intuitivo e facile da usare.

28 ago 2012 18:26:33
1

Ciao @Wyck:

Posso certamente comprendere le tue esigenze; ho avuto clienti che hanno chiesto la stessa cosa. Sfortunatamente però, WordPress lega le pagine del menu di amministrazione (cioè le sezioni del menu) e le sottopagine del menu (cioè le voci del menu) alle capacità, non ai ruoli.

Tuttavia non sarebbe troppo difficile scrivere del codice per un plugin che ti permetta di assegnare le opzioni dei menu di amministrazione ai ruoli invece che alle capacità; il tuo script dovrebbe impostare la capacità richiesta per tutte le opzioni del menu in modo che richiedano una nuova capacità 'not-allowed' e poi fare in modo che il tuo codice assegni selettivamente la capacità predefinita 'read' a ogni opzione del menu per cui il ruolo dell'utente corrente ha la capacità definita.

La domanda più grande diventa allora come rappresentare la mappatura dei ruoli utente alle opzioni del menu? Potrei immaginare che questo richieda un'interfaccia utente di amministrazione piuttosto elaborata. Naturalmente, se vuoi semplicemente hardcodare un array che definisce quali ruoli possono vedere cosa, sarà abbastanza facile...

30 gen 2011 02:38:34
Commenti

Grazie Mike, magari un'idea per un plugin se il tempo lo permette, ma per ora penso che farò qualcosa di semplice e inserirò direttamente un array nel codice, la cosa divertente è che ho pubblicato questo nella discussione sulle funzioni qui alcune settimane fa.

Wyck Wyck
30 gen 2011 07:23:37
0

Questo manterrà solo un paio di voci di menu per gli utenti non amministratori. La versione di @Bainternet utilizza add_cap, che dovrebbe essere eseguita solo una volta, durante l'attivazione del tema o del plugin.

add_action('admin_menu', function () {
    if (current_user_can('administrator')) {
        return;
    }

    /**
     * Mantiene solo specifiche voci di menu e rimuove tutte le altre
     */
    global $menu;
    $hMenu = $menu;
    foreach ($hMenu as $nMenuIndex => $hMenuItem) {
        if (in_array($hMenuItem[2], array(
                                         'index.php',
                                         'edit.php?post_type=product',
                                    ))
        ) {
            continue;
        }
        unset($menu[$nMenuIndex]);
    }
}
19 giu 2013 19:32:34