Вопрос или проблема
Один из наших сайтов включает в себя интернет-магазин, который наряду с продажей по телефону является одним из двух способов, с помощью которых клиенты могут приобретать наши продукты. Вся информация о наших клиентах хранится в программе под названием Orderwise, которая присваивает каждому клиенту уникальный номер. Теперь мы настроили возможность добавления номера Orderwise к пользовательской информации на сайте, поэтому я пытался создать роль, которая позволит отделу продаж получить доступ к панели управления, но только для редактирования информации о пользователях и добавления номеров Orderwise вручную, а также для просмотра информации WooCommerce, такой как заказы. Поэтому я создал роль со следующими возможностями через плагин;
edit_users
list_users
read
read_private_pages
read_private_posts
read_private_products
read_private_shop_coupons
read_private_shop_orders
read_private_shop_webhooks
read_product
read_shop_coupon
read_shop_order
read_shop_webhook
view_woocommerce_reports
Затем я назначил эту роль тестовому аккаунту и попытался войти в систему через /wp-admin. Это позволило мне войти как пользователь публичного сайта, как это могут делать наши клиенты, но не дало доступа к панели управления и редактирования информации о пользователях.
Каких возможностей у меня не хватает в роли? Могут ли они конфликтовать друг с другом?
Я нашёл решение! Я дублировал уже существующую роль и убрал всё ненужное, что, на мой взгляд, не понадобится моей роли отдела продаж. В итоге я получил;
assign_product_terms
assign_shop_coupon_terms
assign_shop_order_terms
assign_shop_webhook_terms
connections_view_public
delete_others_products
delete_others_shop_coupons
delete_others_shop_orders
delete_others_shop_webhooks
delete_private_products
delete_private_shop_coupons
delete_private_shop_orders
delete_private_shop_webhooks
delete_product
delete_product_terms
delete_products
delete_published_products
delete_published_shop_coupons
delete_published_shop_orders
delete_published_shop_webhooks
delete_shop_coupon
delete_shop_coupon_terms
delete_shop_coupons
delete_shop_order
delete_shop_order_terms
delete_shop_orders
delete_shop_webhook
delete_shop_webhook_terms
delete_shop_webhooks
edit_others_products
edit_others_shop_coupons
edit_others_shop_orders
edit_others_shop_webhooks
edit_private_products
edit_private_shop_coupons
edit_private_shop_orders
edit_private_shop_webhooks
edit_product
edit_product_terms
edit_products
edit_published_products
edit_published_shop_coupons
edit_published_shop_orders
edit_published_shop_webhooks
edit_shop_coupon
edit_shop_coupon_terms
edit_shop_coupons
edit_shop_order
edit_shop_order_terms
edit_shop_orders
edit_shop_webhook
edit_shop_webhook_terms
edit_shop_webhooks
edit_users
list_users
manage_links
manage_product_terms
manage_shop_coupon_terms
manage_shop_order_terms
manage_shop_webhook_terms
manage_woocommerce
publish_products
publish_shop_coupons
publish_shop_orders
publish_shop_webhooks
read
read_private_pages
read_private_posts
read_private_products
read_private_shop_coupons
read_private_shop_orders
read_private_shop_webhooks
read_product
read_shop_coupon
read_shop_order
read_shop_webhook
unfiltered_html
view_woocommerce_reports
И как по волшебству, эта новая версия роли отдела продаж теперь может получить доступ к панели управления, имея доступ только к разделам WooCommerce, Продукты и Пользователи.
Если кого-то это интересует, я использовал вдохновляюще названный User Role Editor плагин для создания и редактирования пользовательских ролей.
Вашим сотрудникам отдела продаж, вероятно, не нужна возможность unfiltered_html
.
Согласно https://codex.wordpress.org/Roles_and_Capabilities#unfiltered_html,
Позволяет пользователю размещать HTML-разметку или даже JavaScript-код на страницах, в записях, комментариях и виджетах.
Примечание: Включение этой опции для ненадёжных пользователей может привести к их размещению злонамеренного или плохо отформатированного кода.
Вам не нужно предоставлять доступ к WooCommerce, чтобы предоставить доступ к панели управления. Это просто так, как это хочет WooCommerce. Вы можете использовать эти функции, чтобы переопределить это:
function _wc_disable_admin_bar($prevent_admin_access) {
if (!current_user_can('customer') and !current_user_can('shop_manager')) {
return $prevent_admin_access;
}
return false;
};
add_filter('woocommerce_disable_admin_bar', '_wc_disable_admin_bar', 10, 1);
function _wc_prevent_admin_access($prevent_admin_access) {
if (!current_user_can('customer') and !current_user_can('shop_manager')) {
return $prevent_admin_access;
}
return false;
};
add_filter('woocommerce_prevent_admin_access', '_wc_prevent_admin_access', 10, 1);
Ответ или решение
Чтобы решить проблему с доступом тестового аккаунта к панели управления WordPress, вам необходимо убедиться, что вы правильно настроили роли и разрешения. Из вашего описания видно, что вы уже предпринимали шаги для создания роли, но столкнулись с трудностями при попытке войти в панель управления.
Причины проблемы
На первом этапе вы создали новую роль с набором возможностей, однако некоторые из них могут быть недостаточными для доступа к полной панели управления. WooCommerce имеет свои собственные условия для доступа к админ-панели, и просто наличие необходимых прав на просмотр и редактирование пользователей может не быть достаточным.
Возможные решения
-
Убедитесь, что роль имеет необходимые разрешения:
- Вы включили следующие возможности, которые должны разрешать доступ к админ-панели и управлению пользователями:
edit_users
list_users
read
- Чтобы разрешить доступ к WooCommerce, добавьте:
manage_woocommerce
view_woocommerce_reports
- Вы включили следующие возможности, которые должны разрешать доступ к админ-панели и управлению пользователями:
-
Соберите более полное разрешение:
- Ваша финальная конфигурация, кажется, правильная. Однако вам может не понадобиться право
unfiltered_html
, если ваши пользователи не должны иметь возможность вставлять HTML или JavaScript код. Это может быть соображение безопасности.
- Ваша финальная конфигурация, кажется, правильная. Однако вам может не понадобиться право
-
Изменения в WooCommerce:
- WooCommerce может ограничивать доступ к админке, даже если у пользователя есть необходимые разрешения. Вы можете использовать следующий код, чтобы обойти данные ограничения:
function _wc_disable_admin_bar($prevent_admin_access) { if (!current_user_can('customer') && !current_user_can('shop_manager')) { return $prevent_admin_access; } return false; } add_filter('woocommerce_disable_admin_bar', '_wc_disable_admin_bar', 10, 1); function _wc_prevent_admin_access($prevent_admin_access) { if (!current_user_can('customer') && !current_user_can('shop_manager')) { return $prevent_admin_access; } return false; } add_filter('woocommerce_prevent_admin_access', '_wc_prevent_admin_access', 10, 1);
Этот код позволит пользователям с установленной ролью обойти ограничения WooCommerce и получить доступ к панели управления.
Заключение
Исходя из вышесказанного, убедитесь, что вы предоставили все необходимые разрешения, и добавьте предложенные фильтры WooCommerce, чтобы получить доступ к админ-панели. Если у вас все еще возникают проблемы, рекомендуется проверить, не конфликтуют ли плагины, которые могут ограничить доступ пользователей.