2010-09-14 6 views
2

J'utilise WordPress pour que mes utilisateurs créent leur propre site web/blog. J'ai une configuration que je suis clonage à tous les utilisateurs avec des rôles d'utilisateur spéciaux et des plugins standard. Cependant, certains plugins ne sont pas censés être modifiés ou inactivés par les utilisateurs.Le moyen le plus facile de cacher (certains) les plugins WordPress des utilisateurs?

Est-ce que c'est leur façon de sélectionner quels plugins différents rôles d'utilisateur sont autorisés à utiliser? Ou un moyen facile de cacher certains plugins dans la page plugins, mais les faire fonctionner normalement?

Peut-être qu'il y a un plugin qui m'aide à faire ça?

+0

Doit être déplacé vers superuser.com ou wordpress.stackexchange.com. – joschi

+0

essayez une recherche google pour mu-plugins. cela devrait résoudre votre problème – ChelseaStats

Répondre

7

Vous pouvez écrire un plugin qui utilise le hook de filtre "all_plugins" pour supprimer des plugins de tableau que vous ne voulez pas afficher pour un utilisateur donné. Quelque chose comme ceci:

$plugin_credentials = array(
    'bob' => array(
      'Hello Dolly' => 1 
    ), 
    'jim' => array(
      'Akismet' => 1, 
      'Hello Dolly' => 1, 
    ), 
    'admin' => "**ALL**" 
); 

function plugin_permissions($plugins) 
{ 
     global $current_user, $plugin_credentials; 

     $username = $current_user->user_login; 

     if ($plugin_credentials[$username] == "**ALL**") 
       return $plugins; 

     $viewable_plugins = array(); 

     foreach ($plugins as $plugin) { 
       if (isset($plugin_credentials[$username]) && 
         isset($plugin_credentials[$username][$plugin['Name']]) && 
         $plugin_credentials[$username][$plugin['Name']] == 1) { 

         array_push($viewable_plugins, $plugin); 
       } 
     } 
     return $viewable_plugins; 
} 

add_filter('all_plugins', 'plugin_permissions'); 

La gestion des permissions utilisateur dans le plugin lui-même n'est pas idéale, mais c'est probablement la plus facile. Vous pouvez développer cette idée pour créer des pages d'administration pour gérer les utilisateurs et leurs plugins visibles dans une table de base de données quelque part.

+0

C'était à peu près ce dont j'avais besoin, mais malheureusement, je rencontre des bugs étranges. Je l'ai modifié pour que le tableau plugin_credentials contienne les rôles utilisateur et les plugins que je ne veux pas que les rôles utilisateur voient. et il cache les plugins comme il se doit. Mais il dit que certains plugins inactifs sont actifs, et qu'il est impossible d'activer/désactiver les plugins le lien d'inactivation pour akismet est maintenant: plugins.php? Action = désactiver & plugin = 0 & plugin_status = all & paged = 1 au lieu de plugins.php? Action = Désactiver & plugin = akismet% 2Fakismet.php & plugin_status = all & paged = 1 comme sur l'Admin-user – Volmar

+0

Ack! Je me demande si cela a quelque chose à voir avec la mise en cache de la liste des plugins par wordpress. Vous pouvez essayer d'ajouter un wp_cache_delete ('plugins', 'plugins') juste avant l'instruction return. Mais je ne suis pas sûr si cela va aider. – spuriousdata

+0

J'ai trouvé le problème (et une solution pour cela). le plugin-array d'origine a le chemin d'accès au fichier plugin en tant que clé de tableau. mais le $ viewable_plugins-array utilise la fonction array_push qui annonce 0 comme première clé 1 comme prochaine et ainsi de suite. Ce code a fait l'affaire: $ keys = array_keys ($ plugins); $ num = 0; \t \t foreach ($ plugins comme plugin $) { if (isset (plugin_credentials $ [userrole de $]) && $ plugin_credentials [userrole $] [$ plugin [ 'nom']]! = 1) { \t \t \t \t \t \t $ viewable_plugins [$ keys [$ num]] = $ plugin; } \t \t \t $ num ++; } return $ viewable_plugins; – Volmar

1

Chaque extension spécifie généralement son propre rôle/autorisation, ce que vous pouvez voir si vous regardez leur add_submenu_page() ou de tels appels de fonction. Vous pouvez créer de nouveaux rôles pour ces plugins et remplacer celui qui est spécifié par l'auteur, mais il va également casser les changements si vous mettez à jour les plugins.

+0

Cela résout la moitié du problème, je peux le faire ne pas apparaître dans les menus. mais les plugins sont encore visibles sur la page plugin et peuvent être déséquilibrés par les utilisateurs. (Je dois les laisser activer/inactiveta plugins car il y a d'autres plugins qui doivent pouvoir être activés ou inactivés.) – Volmar

+0

La gestion des droits est l'un des points faibles de WordPress La possibilité d'éditer des plugins est aussi une des permissions. Je vais suggérer à tous vos membres spéciaux un nouveau rôle qui exclurait le droit d'éditer des plugins.Si c'est un cas par cas pour chaque plugin, je crains que WP ne soit pas conçu pour le gérer, j'espère que je me trompe! Je veux regarder WordPress MU. – Extrakun

0

Vous devez stratifier les utilisateurs. Assurez-vous que les utilisateurs Admin sont approuvés et qu'ils ne savent pas manipuler ce qu'ils ne comprennent pas. Les autres devraient être limités à leurs rôles. Auteurs, éditeurs, etc. Par exemple, s'ils ne sont qu'une partie du site pour écrire des articles, alors ils n'ont pas besoin de voir le reste. Faites-en un auteur et finissez-en.

Cela fait partie de la formation du client. Si c'est un client plus petit avec des rôles moins stratifiés, alors faites-en deux comptes. Dites-leur: «C'est le compte que vous administrez le site, vous l'utiliserez rarement, et c'est le compte que vous utiliserez la plupart du temps pour écrire et éditer.Vous pouvez effectuer toutes vos tâches quotidiennes ici et n'aura probablement jamais besoin du compte administrateur ". Vous n'aurez pas toujours de chance avec cette approche, mais moins de temps et d'efforts investis dans la merde, vous ne devriez pas perdre de temps.

0

J'ai fait une nouvelle version basée sur @spuriousdata Answer. Celui-ci utilise le plugin slugs (nom de fichier moins l'extension) pour construire la liste des restrictions. Cette façon est plus facile que nous pouvons unset le tableau en utilisant le premier niveau $key s.

Instructions de configuration dans le code lui-même.

<?php 
/** 
* Plugin Name: Limit Plugins by User 
* Plugin URI: http://stackoverflow.com/q/14340131/1287812 
* Description: Show selected plugins for specific users. 
* Based on the code by spuriousdata, http://stackoverflow.com/a/3713985. 
* Author: brasofilo 
* Author URI: http://wordpress.stackexchange.com/users/12615/brasofilo 
* Version: 1.0 
* License: GPLv2 or later 
*/ 

add_filter('all_plugins', 'plugin_permissions_so_3707134'); 

/** 
* Filter the list of plugins according to user_login 
* 
* Usage: configure the variable $plugin_credentials, which holds a list of users and their plugins. 
* To give full access, put a simple string "ALL" 
* To grant only for some plugins, create an array with the Plugin Slug, 
* which is the file name without extension (akismet.php, hello.php) 
* 
* @return array List of plugins 
*/ 
function plugin_permissions_so_3707134($plugins) 
{ 
    // Config 
    $plugin_credentials = array(
     'admin' => "ALL", 
     'other-admin' => array(
      'akismet', 
     ), 
     'another-admin' => array(
      'akismet', 
      'hello', 
     ), 
    ); 

    // Current user 
    global $current_user; 
    $username = $current_user->user_login; 

    // Super admin, return everything 
    if ("ALL" == $plugin_credentials[ $username ]) 
     return $plugins; 

    // Filter the plugins of the user 
    foreach ($plugins as $key => $value) 
    { 
     // Get the file name minus extension 
     $plugin_slug = basename($key, '.php'); 

     // If not in the list of allowed plugins, remove from array 
     if(!in_array($plugin_slug, $plugin_credentials[ $username ])) 
      unset($plugins[ $key ]); 
    } 

    return $plugins; 
} 
Questions connexes