Вопрос или проблема
Я задумывался, возможно ли разрешить использование функции паролей приложений только для администраторов. Я нашел эту страницу об этом: https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/ Но их код не работает для меня. Функция ниже просто делает так, что функция паролей приложений не работает для всех пользователей. Я что-то упускаю? Спасибо!
function my_prefix_customize_app_password_availability(
$available,
$user
) {
if ( ! user_can( $user, 'manage_options' ) ) {
$available = false;
}
return $available;
}
add_filter(
'wp_is_application_passwords_available_for_user',
'my_prefix_customize_app_password_availability',
10,
2
);
Ответ или решение
Конечно, вопрос ограничения использования функции «Пароли приложений» только для административных пользователей в WordPress — это важная тема для обеспечения безопасности вашего сайта. Я расскажу, как правильно реализовать эту функциональность, учитывая вашу текущую реализацию и возможные недочёты.
Введение
Пароли приложений в WordPress позволяют пользователям безопасно взаимодействовать с вашим сайтом через API, что делает их удобными для приложений и сторонних сервисов. Однако, чтобы гарантировать безопасность, мы можем захотеть ограничить доступ к этой функции только для администраторов.
Проблема
Ваша текущая функция, написанная для фильтрации доступности паролей приложений, действительно может вызывать нежелательные последствия. По вашему описанию кажется, что код, который вы использовали, не работает должным образом, и пароли приложений недоступны для всех пользователей. Давайте разберемся, что именно происходит.
Анализ кода
Ваш код выглядит следующим образом:
function my_prefix_customize_app_password_availability(
$available,
$user
) {
if ( ! user_can( $user, 'manage_options' ) ) {
$available = false;
}
return $available;
}
add_filter(
'wp_is_application_passwords_available_for_user',
'my_prefix_customize_app_password_availability',
10,
2
);
Что может быть не так
-
Проверка прав пользователя: Вы используете функцию
user_can()
, однако она принимает вторым аргументом строку, обозначающую возможность или роль, а не объект$user
. Вместо этого вам нужно использовать функции получения прав непосредственно у объекта пользователя. -
Проблема с анонимными пользователями: Если функция вызвана анонимным пользователем или пользователем без определённых прав, это может привести к тому, что
$available
будет установлено вfalse
.
Исправленный код
Вот как можно исправить вашу функцию:
function my_prefix_customize_app_password_availability($available, $user) {
if ( !$user || !user_can($user->ID, 'manage_options') ) {
return false; // Доступ запрещён
}
return $available; // Доступ разрешён
}
add_filter(
'wp_is_application_passwords_available_for_user',
'my_prefix_customize_app_password_availability',
10,
2
);
Пояснение исправлений
-
Проверка на наличие пользователя: Я добавил проверку
if (!$user)
, чтобы избежать ошибок с анонимными пользователями. -
Использование ID пользователя: Метод
user_can()
теперь принимаетID
пользователя, что корректно проверяет, имеет ли пользователь права администратор.
Заключение
Общие принципы безопасности в области IT диктуют, что доступ к функции, которая может изменить содержимое сайта или управлять им, должен быть осторожно контролируем. Ограничив использование паролей приложений только для администраторов, вы значительно снижаете риски, связанные с безопасностью.
Если у вас остались вопросы по данной реализации или необходимости в дополнительной функциональности, не стесняйтесь обратиться за помощью.