web-dev-qa-db-fra.com

Restreindre l'accès dans le panneau d'administration

Je souhaite restreindre l'accès à certaines pages du plugin/normal WP Pages. J'ai trouvé un moyen de masquer ces pages dans le menu, mais ne les limite pas pour le moment. Par exemple, j'ai un éditeur et je ne veux pas qu'ils aient accès à Media et Tools - je peux cacher ces pages via ceci:

function editor_menu() {
    global $menu;

    if(!current_user_can('administrator'))
    {
        $restricted = array(__('Media'),__('Tools'));
        end ($menu);
        while (prev($menu)){
            $value = explode(' ',$menu[key($menu)][0]);
            if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
        }
    }
}
add_action('admin_menu', 'editor_menu', 999);

Mais comment puis-je les empêcher de voir cette page entièrement? Comme les autorisations?

1
Howdy_McGee

Je pense que la solution correcte ici consiste simplement à mettre à jour le composant $ feature des éléments admin_menu plutôt que de simplement les supprimer de la structure de menu.

Essaye ça:

/** Set 'administrator' cap for particular menu items **/
function update_admin_menu() {
    global $menu, $submenu;

    $menu[10][1] = 'administrator'; // Media
    foreach( $submenu['upload.php'] as &$item ) {
        $item[1] = 'administrator';
    }

    $menu[75][1] = 'administrator'; // Tools
    foreach( $submenu['tools.php'] as &$item ) {
        $item[1] = 'administrator';
    }    
}
add_action( 'admin_menu', 'update_admin_menu', 1000 );

Veuillez noter que la vérification par rapport aux niveaux d'utilisateurs est obsolète, mais cela fonctionne dans cette situation et est essentiellement identique à celui que vous auriez si vous créiez une nouvelle limite ( auxquels les administrateurs auraient automatiquement accès,) et attribueront cette capacité à ces éléments de menu.

1
Bendoh