Как я могу добавить обратный вызов разрешений на страницы индекса REST API?

Вопрос или проблема

Я хотел бы заблокировать доступ неавторизованным пользователям к страницам с JSON индексами, таким как /wp-json и /wp-json/myplugin/v1. Есть ли способ сделать это? В настоящее время у меня все (кроме страницы входа) заблокировано для всех неавторизованных пользователей, но есть еще несколько страниц, которые я хотел бы добавить, и я не хочу в итоге поддерживать длинный список разрешенных страниц.

У меня больше нет доступа к коду, где я в конечном итоге решил это, но фильтры rest_endpoints_description и rest_route_data почти наверняка были задействованы. https://developer.wordpress.org/reference/classes/wp_rest_server/get_data_for_routes/

Ответ или решение

Вопрос о том, как ограничить доступ к индексным страницам REST API для неаутентифицированных пользователей, является актуальной задачей для обеспечения безопасности вашего сайта WordPress. Рассмотрим, как можно реализовать это, используя фрагмент кода и необходимые фильтры.

Реализация ограничения доступа к JSON-страницам REST API

Чтобы запретить неаутентифицированным пользователям доступ к вашему REST API, включая стандартные маршруты типа /wp-json и ваши пользовательские маршруты, такие как /wp-json/myplugin/v1, вы можете использовать механизм разрешения (permissions callback). Это позволяет вам установить персонализированную логику аутентификации на основе ваших требований безопасности.

Подробная инструкция

  1. Использование фильтра ‘rest_endpoints’

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

    add_filter('rest_endpoints', function($endpoints) {
       if ( isset($endpoints['/']) ) {
           $endpoints['/'][0]['permission_callback'] = function() {
               return is_user_logged_in();
           };
       }
    
       foreach ( $endpoints as $route => $handlers ) {
           foreach ( $handlers as $handler ) {
               if ( isset($handler['permission_callback']) ) {
                   $handler['permission_callback'] = function() {
                       return is_user_logged_in();
                   };
               }
           }
       }
       return $endpoints;
    });
  2. Проверка аутентификации

    В данном примере, мы заменяем существующую или добавляем функцию проверки разрешения (permission_callback), применяя is_user_logged_in(). Эта функция гарантирует, что только аутентифицированные пользователи могут получить доступ к страницам API.

  3. Использование правил обратного вызова

    Вы также можете создать сложную логику для permission_callback, учитывающую разные уров

Оцените материал
Добавить комментарий

Капча загружается...