Вопрос или проблема
У меня есть 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 для пользователей с определенной ролью. Используя предложенные решения, вы обеспечите безопасность и приватность загрузок ваших пользователей. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться за поддержкой.