update_core
update_plugins
update_themes
install_plugins
install_themes
delete_themes
edit_plugins
edit_themes
Bonjour, je souhaite limiter ces fonctionnalités à user_id = 1 afin que les autres super-administrateurs ne puissent pas modifier les fichiers réseau. (Btw si je manque quelque chose, faites le moi savoir). Quelle est la bonne façon de cela? Essayé http://wordpress.org/extend/plugins/extended-super-admins/ mais il ajoute la casquette 'manage_esa_options' à chaque blog afin que les super_admins voient des tonnes de blogs dans leur barre d'administration.
La modification des capacités du super administrateur est légèrement différente de celle des autres rôles, car il y a un léger détour dans la façon dont WP vérifie les capacités de l'utilisateur actuel. Voici ce que vous trouvez sur capabilities.php
à la ligne 864:
function has_cap( $cap ) {
// (...)
// Multisite super admin has all caps by definition, Unless specifically denied.
if ( is_multisite() && is_super_admin( $this->ID ) ) {
if ( in_array('do_not_allow', $caps) )
return false;
return true;
}
Cela signifie que nous devons explicitement ajouter 'do_not_allow' au tableau contenant la capacité que nous voulons bloquer. En effet:
add_filter('map_meta_cap', 'not_so_super_admins', 10, 4);
function not_so_super_admins($caps, $cap, $user_id, $args){
$super = array(
'update_core',
'update_plugins',
'update_themes',
'install_plugins',
'install_themes',
'delete_themes',
'edit_plugins',
'edit_themes'
);
if($user_id != 1 && in_array($cap, $super)) {
$caps[] = 'do_not_allow';
}
return $caps;
}
J'ai testé cela et cela semble empêcher d'autres super-administrateurs de faire ce que vous voulez empêcher, et cela assez silencieusement (c'est-à-dire, les rediriger vers le tableau de bord du réseau).
Pour mémoire, ma réponse précédente fonctionnerait dans la plupart des cas sauf celui que vous demandiez. Mes excuses :)
add_action('init', 'not_so_super_admins');
function not_so_super_admins() {
if(is_multisite() && $GLOBALS['blog_id'] == 1) {
$role = get_role('administrator');
$super = array(
'update_core',
'update_plugins',
'update_themes',
'install_plugins',
'install_themes',
'delete_themes',
'edit_plugins',
'edit_themes'
);
if(get_current_user_id() != 1) {
foreach($super as $cap) {
$role->remove_cap($cap);
}
}
else {
foreach($super as $cap) {
$role->add_cap($cap);
}
}
}
}