2010-09-14 3 views
2

Я использую WordPress, чтобы мои пользователи создали свой собственный сайт/блог. У меня есть настройка, которую я клонирую всем пользователям с некоторыми особыми пользовательскими ролями и стандартными плагинами.Самый простой способ скрыть (некоторые) плагины WordPress от пользователей?

Однако некоторые из плагинов не должны быть изменены или инактивированы пользователями.

Есть ли способ выбрать, какие плагины могут использовать разные роли пользователей? Или простой способ скрыть некоторые плагины на странице плагинов, но все же они работают нормально?

Возможно, есть какой-то плагин, который помогает мне это сделать?

+0

Следует переместить на сайт superuser.com или wordpress.stackexchange.com. – joschi

+0

попробуйте найти Google mu-plugins. это должно решить вашу проблему. – ChelseaStats

ответ

7

Вы можете написать плагин, в котором используется фильтр «all_plugins», чтобы удалить из плагинов массива, которые вы не хотите отображать для определенного пользователя. Что-то вроде этого:

$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'); 

Управления разрешений пользователей в самом плагине не является идеальным, но это, вероятно, самым простым. Вы можете расширить эту идею, чтобы создать страницы администрирования для управления пользователями и их видимыми плагинами в таблице базы данных.

+0

Это было в значительной степени то, что мне нужно, но, к сожалению, я столкнулся с некоторыми странными ошибками. Я изменил его так, чтобы массив plugin_credentials содержал роли пользователя и плагины, которые я не хочу видеть в ролях пользователя. и он скрывает плагины так, как должен. Но он говорит, что некоторые плагины, которые неактивны, активны и делают невозможным активировать/неактивные плагины, теперь инактивирует ссылку для akismet: plugins.php? Action = deactivate & plugin = 0 & plugin_status = all & paged = 1 вместо plugins.php? Action = deactivate & plugin = akismet% 2Fakismet.php & plugin_status = all & paged = 1 как у администратора-пользователя – Volmar

+0

Ack! Интересно, имеет ли он какое-то отношение к кешированию wordpress в списке плагинов. Вы можете попробовать добавить wp_cache_delete («плагины», «плагины») прямо перед оператором return. Но я не уверен, что это поможет. – spuriousdata

+0

Я нашел проблему (и решение для нее). исходный $ plugin-массив имеет путь к файлу плагина в виде ключа массива. но в $ viewable_plugins-array используется функция array_push с объявлениями 0 в качестве первого ключа 1 как следующего и так далее. Этот код сделал трюк: $ keys = array_keys ($ plugins); $ num = 0; \t \t Еогеасп ($ плагинов как $ плагин) { если (Исеть ($ plugin_credentials [$ UserRole]) && $ plugin_credentials [$ UserRole] [$ плагин [ 'Имя']]! = 1) { \t \t \t \t \t \t $ viewable_plugins [$ keys [$ num]] = $ плагин; } \t \t \t $ num ++; } return $ viewable_plugins; – Volmar

1

Каждый плагин обычно укажет свою собственную роль/разрешение, которое вы можете увидеть, если вы посмотрите на их add_submenu_page() или такие вызовы функций. Вы можете создавать новые роли для этих плагинов и заменять тот, который указан автором, но он также нарушит изменения, если вы обновите плагины.

+0

Это решает половину проблемы, я могу заставить ее не отображаться в меню. но плагины становятся видимыми на плагиновой странице и могут быть разблокированы пользователями. (я должен позволить им активировать/inactiveta плагины, потому что есть другие плагины, которые должны быть активированы или инактивированы. – Volmar

+0

Управление правами - одна из слабых точек WordPress. Возможность редактирования плагинов также является одним из разрешений. Я предлагаю предоставить всем вашим специальным членам новую роль, которая исключает право редактировать плагины. Если это зависит от каждого плагина, я боюсь, что WP не предназначен для его обработки. Надеюсь, что я ошибаюсь! хотите посмотреть WordPress MU. – Extrakun

0

Вы должны расслоить пользователей. Убедитесь, что пользователям (пользователям) Admin доверяют и не знают, что они не понимают, чего они не понимают. Остальные должны быть ограничены их ролями. Авторы, редакторы и т. Д. Например, если они всего лишь часть сайта для написания статей, то им не нужно видеть остальную часть. Сделайте их авторами и покончите с этим.

Это часть обучения клиентов. Если его меньший клиент с менее стратифицированными ролями, то сделайте им две учетные записи. Скажите им: «Это учетная запись, с которой вы управляете сайтом, вы будете использовать это редко. И это учетная запись, которую вы будете использовать большую часть времени для написания и редактирования. Вы можете выполнять все ваши ежедневные задачи здесь и скорее всего, никогда не понадобится учетная запись администратора ». У вас не всегда будет удача в этом подходе, но меньше времени и усилий, потраченных на дерьмо, вы не должны тратить время.

0

Я сделал новую версию, основанную на @spuriousdata Ответ. В нем используется плагин slugs (имя файла минус расширение), чтобы создать список ограничений. Этот способ проще, так как мы можем использовать массив с использованием первого уровня $key s.

Инструкции по конфигурации в самом коде.

<?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; 
} 
Смежные вопросы