Ограничить медиатеку WordPress для конкретной роли пользователя (пользователи могут видеть/выбирать только свои медиа)

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

У меня есть 4 роли на моей платформе: администратор, автор, редактор, внешний

Мне нужно ограничить доступ к медиабиблиотеке WordPress, чтобы пользователь мог видеть только свои собственные загрузки для одной роли пользователя (внешний) на моей платформе. Пользователь с ролью “внешний” может видеть/выбирать только свои собственные медиафайлы.

Все остальные роли по-прежнему имеют доступ ко всем медиафайлам в библиотеке.

Я нашел следующие скрипты, но они работают для всех пользователей:

<?php // Ограничить доступ к медиабиблиотеке (пользователи могут видеть/выбирать только свои медиафайлы) //
   add_filter( 'ajax_query_attachments_args', 'wpsnippet_show_current_user_attachments' );
   function wpsnippet_show_current_user_attachments( $query ) {
      $user_id = get_current_user_id();
      if ( $user_id && !current_user_can('activate_plugins') && !current_user_can('edit_others_posts')) {
         $query['author'] = $user_id;
      }
      return $query;
   }
?>

Заранее спасибо за ваш ответ.

Добавьте это в ваш functions.php или в сниппет, с помощью этого кода пользователи с ролью “внешний” будут видеть только свои собственные загрузки, любые другие роли будут видеть их все, как и раньше.

add_filter( 'ajax_query_attachments_args', 'role_external' );
function role_external( $query ) {
    $user_id = get_current_user_id();
    if ( $user_id && current_user_can('external') ) {
        $query['author'] = $user_id;
    }
    return $query;
}

Чтобы защитить вашу папку с изображениями, попробуйте использовать это

Добавьте простой файл .htaccess в папку вашего сайта с следующими строками

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www\.your-domain\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www\.your-domain\.com$ [NC]
RewriteRule .*\.(wav|swf|jpg|jpeg|gif|png|bmp|js|css)$ - [F,NC,L]

Обратите внимание, что я также добавил js и css файлы, даже если мне кажется странным находить кого-то, кто пытается их скопировать.

Этот ответ можно найти здесь

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

Чтобы ограничить доступ к библиотеке медиафайлов WordPress для конкретной роли пользователей (в данном случае для роли "external"), существует несколько шагов, которые необходимо пройти. Мы будем использовать фильтр ajax_query_attachments_args, чтобы ограничить пользователям этой роли видимость их собственных загрузок. В этой статье я предоставлю подробные инструкции по настройке данного функционала.

Шаг 1: Добавление кода в файл functions.php вашей темы

Первым делом, нужно добавить фильтр в файл functions.php вашей активной темы. Это можно сделать через панель администратора WordPress или с помощью FTP-клиента. Откройте файл functions.php и добавьте следующий код:

add_filter('ajax_query_attachments_args', 'restrict_media_library_for_external_role');

function restrict_media_library_for_external_role($query) {
    // Получаем текущий идентификатор пользователя
    $user_id = get_current_user_id();

    // Проверяем, является ли пользователь внешним
    if ($user_id && current_user_can('external')) {
        // Ограничиваем запрос к медиафайлам только для загрузок текущего пользователя
        $query['author'] = $user_id;
    }

    return $query;
}

Шаг 2: Проверка для других ролей

Важно отметить, что добавленный код не окажет влияния на другие роли пользователей, такие как администраторы, авторы или редакторы. Все они по-прежнему смогут видеть и выбирать любые файлы из медиа-библиотеки. Ваш код будет работать только для пользователей с ролью "external".

Шаг 3: Защита медиафайлов

Чтобы предотвратить случайный доступ к медиафайлам через прямые ссылки, рекомендуется добавить файл .htaccess в папку с вашими медиафайлами. Добавьте в него следующий код:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www\.ваш-домен\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www\.ваш-домен\.com$ [NC]
RewriteRule .*\.(wav|swf|jpg|jpeg|gif|png|bmp|js|css)$ - [F,NC,L]

Этот код запретит доступ к медиафайлам, если они запрашиваются с других сайтов.

Шаг 4: Тестирование

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

Заключение

Следуя этим шагам, вы сможете успешно ограничить доступ к медиа-библиотеке WordPress для пользователей с определенной ролью. Используя предложенные решения, вы обеспечите безопасность и приватность загрузок ваших пользователей. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться за поддержкой.

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

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