Как добавить разрешение (Capability) для роли пользователя?

29 мар. 2011 г., 20:31:17
Просмотры: 47.6K
Голосов: 19

Я управляю сетью WordPress и хотел бы добавить разрешение unfiltered_html для уже предопределенной роли администратора. В стандартной установке WordPress учетная запись администратора уже имеет это разрешение, но в установке MU это разрешение доступно только суперадминистраторам. Роли и разрешения WordPress.

Как я могу расширить роль администратора из темы или плагина?

4
Комментарии

http://wordpress.org/extend/plugins/unfiltered-mu/ похоже, может помочь. Но он работает для администраторов и редакторов. Если это нежелательно, возможно, код можно немного изменить?

Rev. Voodoo Rev. Voodoo
29 мар. 2011 г. 22:30:51

@Rev. Voodoo Спасибо за предложение. Это помогло пролить свет на вопрос, так как просто добавление возможности unfiltered_html недостаточно, чтобы позволить роли, отличной от Администратора или Супер администратора, публиковать встраиваемый контент и т.д. Ключом было отключение/перехват WordPress KSES: kses_remove_filters()

Jonnybojangles Jonnybojangles
6 апр. 2011 г. 02:44:09

Подробный блог:http://goo.gl/xNuafH

Suresh Kamrushi Suresh Kamrushi
14 янв. 2016 г. 11:19:33
Все ответы на вопрос 2
5
21

Вы можете использовать класс WP_Role,

// получаем объект роли
$role_object = get_role( $role_name );

// добавляем $cap возможность к этому объекту роли
$role_object->add_cap( $capability_name );

// удаляем $cap возможность из этого объекта роли
$role_object->remove_cap( $capability_name );

Таким образом, чтобы решить ваш первоначальный вопрос о том, как разрешить Администраторам вставлять теги SCRIPT и IFRAME в содержимое записей, вам нужна возможность 'unfiltered_html', которая в Multisite предоставляется только Супер Администраторам.

// получаем объект роли администратора
$admin_role = get_role( 'administrator' );
// предоставляем возможность unfiltered_html
$admin_role->add_cap( 'unfiltered_html', true );

или вы можете один раз выполнить это в ваших функциях:

/* Роли и возможности */
add_role('professional', 'Профессиональный пользователь', array(
    'read' => true, // True разрешает возможность, False явно отключает её.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //последний элемент массива не требует запятой!
));
30 мар. 2011 г. 08:39:58
Комментарии

Спасибо, Филипп. Что касается класса WP_Role, когда следует выполнять этот код? Я предполагаю, что это влияет на глобальный объект роли?

Я рад, что вы упомянули второй блок кода, где говорится, что я могу запустить его один раз в моем файле функций. Я находил похожие решения на форумах поддержки WordPress, но мне кажется странным иметь код, который выполняется один раз, в теме или плагине. Особенно без проверки, существует ли уже это изменение. Возможно, запись роли на самом деле незначительна. Проверить наличие capability vs просто записать capability в роль, как показано в вашем первом примере.

Jonnybojangles Jonnybojangles
30 мар. 2011 г. 19:01:07

Мне тоже интересно, как вы бы выполнили класс WP_Role, если у вас найдется свободная минута, чтобы рассказать нам. Спасибо.

Osu Osu
30 мар. 2011 г. 21:49:00

@Jonnybojagles & @Osu, посмотрите это: Полное руководство по ролям и возможностям http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/

Philip Philip
31 мар. 2011 г. 08:39:36

Я уже читал эту статью в своем исследовании, но воспользовался возможностью снова пробежаться по ней, спасибо! В конечном итоге, после анализа плагина unfiltered-mu (упомянутого выше Rev. Voodoo), я выяснил, что простое изменение ролей путем добавления возможностей недостаточно. Мне потребовалось отключить фильтры KSES в WordPress.

Jonnybojangles Jonnybojangles
6 апр. 2011 г. 02:52:18

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

nyedidikeke nyedidikeke
31 мая 2017 г. 13:40:00
1

Чтобы разрешить другой роли, кроме Супер Администратора или Администратора (в зависимости от того, является ли установка WordPress сетевой/MU или нет), добавлять нефильтрованный HTML в запись или комментарий, необходимо удалить фильтр KSES в WordPress.

Проверить, есть ли у пользователя определённая возможность.

if ( current_user_can( 'unfiltered_html' ) ) { … }

Если да, то удалить KSES

kses_remove_filters();

Эта функциональность уже упакована в плагин unfiltered-mu, позволяя администраторам и редакторам добавлять нефильтрованный HTML.

6 апр. 2011 г. 21:17:14
Комментарии

Функциональность также обернута в регистрацию и дерегистрацию плагина, чтобы логику не нужно было выполнять на каждом экземпляре WordPress.

Jonnybojangles Jonnybojangles
12 апр. 2011 г. 21:30:27