15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
23.10.2024

Роль участника WordPress: разрешения, ограничения и лучшие практики редакционного рабочего процесса

Роль Contributor в WordPress — это ограниченный тип учётной записи пользователя, предоставляющий доступ на запись в редакторе записей без права публикации. Contributor может создавать черновики и отправлять записи на проверку, но не может публиковать контент, загружать медиафайлы или получать доступ к общесайтовым настройкам. Это делает данную роль правильным выбором для приглашённых авторов, авторов сообщества или любых внешних соавторов, которые должны создавать контент без доступа к операционным элементам управления сайтом.

Это различие имеет практическое значение: назначение неправильной роли — например, предоставление случайному автору доступа уровня Author — создаёт прямой путь к несанкционированной публикации, неограниченной загрузке медиафайлов и потенциальным нарушениям политики контента. Понимание того, какое место роль Contributor занимает в иерархии возможностей WordPress, является основой для управления безопасным многоавторским сайтом с возможностью редактирования.

Иерархия ролей WordPress: место роли Contributor

WordPress поставляется с пятью встроенными ролями пользователей, каждая из которых определяется дискретным набором возможностей, хранящихся в базе данных. От наибольших привилегий к наименьшим:

  1. Administrator — полный контроль над сайтом, включая управление плагинами и темами
  2. Editor — управляет и публикует весь контент, включая записи других пользователей
  3. Author — публикует собственные записи и управляет ими, может загружать медиафайлы
  4. Contributor — пишет и отправляет записи на проверку, без права публикации и загрузки медиафайлов
  5. Subscriber — доступ к панели управления только для чтения, управление собственным профилем

Роль Contributor занимает второй снизу уровень. Её набор возможностей намеренно ограничен, что и составляет её ценность в контролируемой редакционной среде.

Точные возможности, назначенные роли Contributor

Возможности WordPress хранятся в виде сериализованного массива в таблице wp_options под ключом wp_user_roles. Роли Contributor по умолчанию предоставляются следующие возможности:

  • read — доступ к панели администратора и чтение приватного контента, к которому разрешён доступ
  • edit_posts — создание новых записей и редактирование собственных черновиков
  • delete_posts — удаление собственных неопубликованных записей

Это полный набор по умолчанию. Примечательно отсутствие следующих возможностей:

  • publish_posts — заблокировано; записи отправляются со статусом «Ожидает проверки»
  • upload_files — заблокировано; нет доступа к медиатеке
  • edit_published_posts — заблокировано; после того как Editor публикует запись Contributor, Contributor теряет доступ к её редактированию
  • edit_others_posts — заблокировано; нет доступа к контенту других пользователей
  • edit_pages — заблокировано; нет доступа к типу записей «Страницы»
  • manage_options — заблокировано; нет доступа к меню «Настройки», «Плагины», «Темы» и «Инструменты»

Эта модель возможностей применяется на уровне приложения ядром WordPress при каждом запросе к панели администратора. Это не просто ограничение интерфейса — попытка прямого доступа к ограниченной конечной точке возвращает ошибку «У вас недостаточно прав».

Сравнение возможностей Contributor, Author и Editor

ВозможностьContributorAuthorEditor
Создание новых записейДаДаДа
Редактирование собственных черновиковДаДаДа
Публикация собственных записейНетДаДа
Удаление собственных опубликованных записейНетДаДа
Загрузка медиафайловНетДаДа
Редактирование чужих записейНетНетДа
Публикация чужих записейНетНетДа
Удаление чужих записейНетНетДа
Управление категориями записейНетНетДа
Модерация комментариевНетНетДа
Доступ к страницамНетНетДа

Разрыв между Contributor и Author существенен: роль Author добавляет publish_posts, upload_files, delete_published_posts и edit_published_posts. Предоставление доступа уровня Author там, где достаточно Contributor, устраняет редакционный контроль, защищающий качество контента и целостность сайта.

Рабочий процесс «Ожидает проверки» в деталях

Когда Contributor нажимает Отправить на проверку в блочном или классическом редакторе, WordPress изменяет поле post_status записи в таблице wp_posts с draft на pending. Это вызывает следующее поведение:

  • Запись исчезает из списка редактируемых черновиков Contributor (он всё ещё может её просматривать, но блокировка редактирования применяется)
  • WordPress отправляет уведомление по электронной почте всем пользователям с возможностью edit_others_posts (Editor и Administrator), если соответствующая настройка уведомлений активна
  • Запись появляется в очереди Ожидает проверки в разделе «Записи» панели администратора, видимой только Editor и Administrator

Критический граничный случай: как только запись получает статус pending, Contributor не может её редактировать. Если Editor хочет, чтобы Contributor доработал черновик перед публикацией, Editor должен либо вручную вернуть статус записи на draft, либо использовать плагин редакционного рабочего процесса, поддерживающий встроенные запросы на правки. Без определённого процесса записи могут бесконечно зависать в очереди.

Второй граничный случай: если Administrator публикует запись Contributor, а затем Contributor её просматривает, кнопка редактирования отсутствует. Contributor навсегда потерял доступ на запись к этой конкретной записи. Это удивляет новых администраторов сайта, ожидающих, что исходный автор сохранит права владения. Это сделано намеренно — edit_published_posts не входит в набор возможностей Contributor.

Ограничение загрузки медиафайлов: практические решения

Отсутствие upload_files является наиболее операционно разрушительным аспектом роли Contributor. Contributor, пишущие контент с большим количеством изображений, вынуждены согласовывать медиатребования по внешним каналам. Практические решения включают:

Вариант 1: Встроенные ссылки на медиафайлы в тексте записи

Contributor вставляют URL изображений из одобренных внешних источников (общий Google Drive, Dropbox или CDN) непосредственно в запись. Editor заменяет их правильно загруженными и оптимизированными версиями перед публикацией.

Вариант 2: Общая промежуточная медиатека

Editor заранее наполняет медиатеку одобренными стоковыми изображениями, фирменными материалами и повторяющимися визуальными элементами. Contributor указывают их по названию в поле примечаний к записи, а Editor вставляет их в процессе проверки.

Вариант 3: Расширение возможностей Contributor с помощью кода

Если ваш рабочий процесс действительно требует, чтобы Contributor загружали собственные изображения, вы можете программно расширить роль. Добавьте следующее в файл functions.php вашей темы или в плагин для конкретного сайта:

function add_contributor_upload_capability() {
    $role = get_role( 'contributor' );
    if ( $role ) {
        $role->add_cap( 'upload_files' );
    }
}
add_action( 'init', 'add_contributor_upload_capability' );

Это предоставляет upload_files всем Contributor на уровне сайта. Учтите, что это также даёт им доступ к полной медиатеке, включая файлы, загруженные другими пользователями. Если это вызывает опасения, используйте этот вариант совместно с плагином, например Media Library Organizer или WP Media Folder, для обеспечения изоляции медиафайлов по пользователям.

Вариант 4: Плагины для управления возможностями ролей

Плагины, такие как Members (от Justin Tadlock) или User Role Editor, позволяют детально назначать возможности для каждой роли и каждого пользователя через интерфейс администратора без изменения кода. Это рекомендуемый подход для администраторов сайта, не являющихся разработчиками.

Настройка и назначение роли Contributor

Для назначения пользователю роли Contributor требуется доступ Administrator. Процесс:

  1. Перейдите в раздел Пользователи > Все пользователи в панели администратора WordPress
  2. Нажмите на имя пользователя, чтобы открыть его профиль
  3. Прокрутите до выпадающего списка Роль и выберите Contributor
  4. Нажмите Обновить пользователя

Для массового назначения роли Contributor выберите нескольких пользователей на экране «Все пользователи», выберите Изменить роль на… Contributor из выпадающего списка массовых действий и нажмите Изменить.

Для программного создания новой учётной записи Contributor (полезно для автоматизированных скриптов регистрации):

$user_id = wp_create_user( 'jane_writer', 'secure_password_here', 'jane@example.com' );
if ( ! is_wp_error( $user_id ) ) {
    $user = new WP_User( $user_id );
    $user->set_role( 'contributor' );
}

Плагины редакционного рабочего процесса для управления Contributor

Система уведомлений WordPress по умолчанию для ожидающих публикации записей минималистична. Для сайтов с несколькими Contributor и Editor необходим специализированный инструментарий редакционного рабочего процесса.

PublishPress

Наиболее функционально полный бесплатный вариант. Добавляет контент-календарь, пользовательские статусы записей (помимо draft, pending, publish), редакционные комментарии, видимые только редакционной команде, и уведомления по электронной почте/Slack, запускаемые при изменении статуса. Contributor видит текущий статус своей записи в режиме реального времени без необходимости связываться с Editor.

Edit Flow

Предшественник PublishPress, в значительной мере вытесненный им, но всё ещё функциональный. Предлагает редакционные метаданные, группы пользователей и представление бюджета материалов. Подходит для небольших команд, которым не нужен полный набор функций PublishPress.

Oasis Workflow

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

CoSchedule

Платный вариант, интегрирующий редакционный рабочий процесс с планированием публикаций в социальных сетях. Полезен для команд контент-маркетинга, где запись Contributor является частью скоординированного плана публикации и продвижения.

Лучшие практики управления Contributor в масштабе

Определите рабочий процесс в письменном виде до регистрации первого Contributor. Неопределённость в вопросах того, кто что проверяет и в какие сроки, создаёт узкие места и разочарованных авторов. Задокументируйте: формат подачи материалов, ожидаемые сроки проверки, процесс запроса правок и что происходит с записями, которые остаются в статусе «Ожидает проверки» дольше установленного срока.

Создайте руководство по стилю для Contributor. Поскольку Contributor не имеют доступа к страницам, распространяйте руководства в виде закреплённой записи в приватной категории, видимой только Contributor, или в виде внешнего документа, ссылка на который содержится в приветственном письме. Охватите: формат заголовков, минимальное количество слов, требования к внутренним ссылкам, требования к SEO-метаданным и правила поиска изображений.

Назначьте ответственного Editor, а не просто любого Editor. Возможность edit_others_posts есть у всех Editor. Без назначенного владельца очереди Contributor записи могут оставаться непроверенными. Назначьте конкретного Editor основным рецензентом для материалов Contributor и настройте уведомления PublishPress так, чтобы оповещения об ожидающих записях направлялись именно этому пользователю.

Проверяйте учётные записи Contributor ежеквартально. Неактивные учётные записи с любым уровнем доступа представляют собой поверхность атаки. Выполните следующую команду WP-CLI, чтобы получить список всех Contributor, не входивших в систему в течение последних 90 дней:

wp user list --role=contributor --fields=ID,user_login,user_email,user_registered --format=table

Сопоставьте с данными о последнем входе (доступными через плагины, такие как WP Last Login или Simple History), и отзовите или понизьте неактивные учётные записи до Subscriber.

Никогда не назначайте доступ Contributor автоматизированным интеграциям публикации. API-клиентам, импортёрам RSS и инструментам синдикации контента требуется как минимум publish_posts. Назначение им роли Contributor приведёт к скрытым сбоям, когда контент будет отправляться как ожидающий, а не публиковаться. Используйте выделенную сервисную учётную запись с ролью Author для этих интеграций.

Используйте пароли приложений для доступа через API, а не общие учётные данные. Если Contributor необходимо отправлять записи через WordPress REST API (например, из headless CMS или инструмента для написания текстов), создайте пароль приложения в профиле пользователя, а не передавайте основные учётные данные аккаунта. Это ограничивает доступ через API и позволяет отозвать его без изменения пароля учётной записи.

Соображения безопасности, специфичные для роли Contributor

Роль Contributor в целом несёт низкий риск, но ряд векторов атак заслуживает понимания:

Хранимый XSS через содержимое записи. Contributor могут отправлять произвольный HTML в пределах, установленных фильтром содержимого kses WordPress. Функция wp_kses_post() удаляет недопустимые теги при сохранении, однако список разрешённых тегов широк. Злоумышленник с ролью Contributor может встроить обфусцированный JavaScript в разрешённые атрибуты, если сайт использует плохо настроенный список разрешений wp_kses или плагин, обходящий фильтрацию контента. Всегда убеждайтесь, что DISALLOW_UNFILTERED_HTML определена в wp-config.php для любого сайта с ненадёжными Contributor:

define( 'DISALLOW_UNFILTERED_HTML', true );

Эта константа запрещает пользователям ниже уровня Administrator сохранять нефильтрованный HTML, независимо от их возможностей.

Повышение привилегий через уязвимые плагины. Несколько задокументированных CVE связаны с плагинами, которые проверяют наличие edit_posts (присутствующей у Contributor), а не publish_posts или manage_options, перед выполнением привилегированных действий. Обновляйте плагины и проверяйте новые установки плагинов на наличие проверок возможностей с помощью таких инструментов, как Plugin Security Scanner, или путём ручного анализа кода.

Перечисление учётных записей. WordPress открывает URL архивов авторов по адресам /?author=1, /?author=2 и т.д., что раскрывает имена пользователей. Если Contributor являются внешними пользователями, это утечка их логинов. Перенаправьте или заблокируйте перечисление архивов авторов на уровне сервера или с помощью плагина безопасности.

Для сайтов, работающих в среде VPS Хостинга, эти меры по усилению защиты на уровне WordPress должны сочетаться с элементами управления на уровне сервера: ограничениями open_basedir PHP, disable_functions для опасных функций PHP и правилами брандмауэра веб-приложений, нацеленными на специфические для WordPress паттерны атак.

Роль Contributor в WordPress в сетях Multisite

В установке WordPress Multisite роль Contributor является специфичной для сайта. Пользователь может быть Contributor на одном подсайте и Editor на другом. Сетевые Administrator управляют ролями пользователей для каждого сайта из панели сетевого администратора.

Одно важное различие: роль Super Admin в Multisite обходит все проверки возможностей. Никогда не назначайте Super Admin авторам контента. Для крупных сетей Multisite, обслуживающих клиентские сайты или платформы сообществ, рассмотрите использование среды Выделенных серверов, чтобы обеспечить производительность базы данных и файловой системы, необходимую для больших очередей ожидающих записей и накладных расходов плагинов редакционного рабочего процесса.

Интеграция Contributor с пользовательскими типами записей

По умолчанию возможности роли Contributor применяются только к типу записей post. Если ваш сайт использует пользовательские типы записей (CPT) — например, CPT review, tutorial или case_study — Contributor не будут иметь к ним доступа, если вы явно не сопоставите возможности.

При регистрации CPT используйте аргументы capability_type и map_meta_cap:

register_post_type( 'tutorial', array(
    'label'           => 'Tutorials',
    'capability_type' => 'post',
    'map_meta_cap'    => true,
    'supports'        => array( 'title', 'editor', 'author', 'revisions' ),
    // additional arguments
) );

Установка capability_type в значение 'post' сопоставляет возможности CPT со стандартными возможностями записей, что означает, что Contributor будут иметь те же отношения edit_posts / без publish_posts с CPT, что и со стандартными записями. Использование пользовательского capability_type (например, 'tutorial') создаёт отдельные возможности (edit_tutorials, publish_tutorials), которые должны быть явно предоставлены роли Contributor, если предполагается доступ.

Соображения о хостинговой среде для многоавторских сайтов WordPress

Многоавторский сайт WordPress с активным пулом Contributor генерирует больше одновременных сессий в панели администратора, больше операций записи в базу данных (автосохранения черновиков, хранение ревизий, обновления статусов ожидания) и больше уведомлений по электронной почте, чем блог с одним автором. Хостинговая среда должна быть соответствующим образом масштабирована.

Производительность базы данных: WordPress хранит каждое автосохранение и ревизию как отдельную строку в wp_posts. При одновременном создании черновиков несколькими Contributor эта таблица быстро растёт. Включите ограничения ревизий в wp-config.php:

define( 'WP_POST_REVISIONS', 5 );

Это ограничивает хранимые ревизии пятью на запись, предотвращая неограниченный рост таблицы.

Доставляемость электронной почты: WordPress отправляет уведомления об ожидающих записях через wp_mail(), который по умолчанию использует функцию PHP mail() сервера. На общем хостинге это ненадёжно и часто помечается как спам. Настройте SMTP-плагин (WP Mail SMTP, FluentSMTP), указывающий на выделенный почтовый сервис. Для сайтов, которым требуется надёжная транзакционная электронная почта как часть редакционного рабочего процесса, выделенное решение Email Хостинга обеспечивает доставляемость и надлежащую аутентификацию SPF/DKIM.

Совместимость с кешированием: Плагины объектного кеширования (Redis, Memcached) могут вызывать устаревшие проверки возможностей, если данные ролей пользователей агрессивно кешируются. После программного изменения возможностей Contributor очистите объектный кеш:

wp cache flush

Для команд, управляющих WordPress через панель управления, среды VPS с cPanel предоставляют удобный интерфейс для управления настройками PHP, учётными записями электронной почты и доступом к базе данных без необходимости прямого SSH для рутинных задач.

Принудительное использование SSL: Любой сайт с авторизованными пользователями — включая Contributor — должен принудительно использовать HTTPS. Передача аутентификационных cookie WordPress по HTTP подвергает токены сессий перехвату. Убедитесь, что у вашего сайта есть действующий сертификат и что FORCE_SSL_ADMIN установлена:

define( 'FORCE_SSL_ADMIN', true );

Правильно выданный SSL-сертификат является обязательным условием для любой установки WordPress, принимающей входы Contributor.

Матрица решений: когда использовать Contributor вместо других ролей

СценарийРекомендуемая рольОбоснование
Приглашённый блогер, разовая публикацияContributorНет прав публикации, минимальный след доступа
Постоянный штатный автор, надёжныйAuthorМожет публиковать самостоятельно, снижая нагрузку на Editor
Контент-менеджер, курирующий авторовEditorНеобходимо управлять записями других и категориями
Разработчик или владелец сайтаAdministratorТребуется доступ к плагинам, темам и настройкам
Подписчик рассылки с логиномSubscriberТолько чтение, создание контента не требуется
Скрипт автоматического импорта контентаAuthor (сервисная учётная запись)Требуется publish_posts; используйте пароль приложения
Автор из внешнего агентства, ненадёжныйContributorРедакционный контроль предотвращает несанкционированную публикацию

Технический контрольный список ключевых выводов

  • Убедитесь, что новым внешним авторам назначена роль Contributor, а не Author, перед предоставлением доступа к панели управления.
  • Определите DISALLOW_UNFILTERED_HTML в wp-config.php на любом сайте с ненадёжными учётными записями Contributor.
  • Установите WP_POST_REVISIONS в конечное число, чтобы предотвратить раздувание базы данных из-за одновременных сессий создания черновиков.
  • Установите плагин редакционного рабочего процесса (рекомендуется PublishPress) до регистрации более двух-трёх Contributor — система уведомлений об ожидающих записях по умолчанию не масштабируется.
  • Если Contributor необходим доступ к загрузке медиафайлов, расширьте роль через add_cap( 'upload_files' ) или плагин управления возможностями и дополните это изоляцией медиафайлов по пользователям.
  • Для пользовательских типов записей явно проверьте сопоставление capability_type, чтобы Contributor имели предполагаемый уровень доступа — или вообще не имели доступа.
  • Проверяйте учётные записи Contributor ежеквартально с помощью wp user list --role=contributor и оперативно отзывайте неактивные учётные записи.
  • Принудительно используйте HTTPS с FORCE_SSL_ADMIN и действующим SSL-сертификатом на всех установках, принимающих входы Contributor.
  • Масштабируйте хостинговую среду для одновременных сессий в панели администратора и объёма операций записи в базу данных пропорционально количеству активных Contributor.
  • Задокументируйте редакционный рабочий процесс — формат подачи материалов, SLA проверки, процесс запроса правок — до создания первой учётной записи Contributor.

Часто задаваемые вопросы

Может ли Contributor в WordPress публиковать собственные записи?

Нет. Роль Contributor не включает возможность publish_posts. Когда Contributor завершает черновик, он может только отправить его на проверку, что устанавливает статус записи pending. Фактическое действие публикации должен выполнить Editor или Administrator.

Почему Contributor не могут загружать изображения в WordPress?

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

Что происходит с записью Contributor после её публикации?

После публикации Contributor теряет доступ к редактированию записи. Возможность edit_published_posts не входит в роль Contributor, поэтому опубликованная версия контролируется исключительно Editor и Administrator. Contributor всё ещё может просматривать запись, но не может её изменять.

Как запретить Contributor видеть черновики других пользователей?

По умолчанию Contributor могут видеть только собственные записи в панели администратора — возможность edit_others_posts отсутствует в их роли. Дополнительная настройка не требуется. Однако если вы установили плагины, добавляющие функциональность общих черновиков, убедитесь, что эти плагины соблюдают проверки возможностей WordPress.

Можно ли настроить роль Contributor для доступа к пользовательским типам записей?

Да. Пользовательские типы записей используют собственные наборы возможностей. Если CPT зарегистрирован с capability_type => 'post' и map_meta_cap => true, Contributor будут иметь тот же доступ «создание черновика и отправка», что и для стандартных записей. Если CPT использует пользовательский тип возможностей, вы должны явно предоставить соответствующую возможность редактирования роли Contributor с помощью $role->add_cap() или плагина, такого как Members или User Role Editor.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать