Админ самый главный, первый. Он тоже получал 403
В общем сейчас всё разрешилось. Добавила вот:
mymodule_file_download(string $uri): ?array {
if (strpos($uri, 'private:') !== 0) {
return NULL;
}
if (!\Drupal::currentUser()->hasPermission('access private files')) {
return -1;
}
Вот например ссылка на файл, который я гружу в ноду, и по этой ссылке файл открывается
mysite.ru/system/files/2025-06/1.jpg
А вот ссылка на мой генерируемый файл
mysite.ru/system/files/my-dir/myfile74.docx
Она выдает 403
Вообще было бы здорово обойтись php://output но проблема в том, что я генерирую файл на основе шаблона. И в этом случае есть возможность только сохранять новый полноценный файл. С этим тоже долго разбиралась, и как поняла при использовании PhpOffice\PhpWord\TemplateProcessor невозможно вывести файл через php://output
Собственно всё как обычно. Одно получилось, но дальше всё равно не идет
Сделала вот так:
$uri = $PATH;
$data = file_get_contents($uri);
$fileRepository = \Drupal::service('file.repository');
$fileRepository->writeData($data, $uri, FileSystemInterface::EXISTS_REPLACE);
Всё отлично, друпал берет мои файлы, они появиляются в базе
Но админ снова видит 403
Да, верно, папка есть и она за пределами корня. И в нее у меня прекрасно уходят файлы из полей сущностей, и они мне доступны по ссылке. И туда также автоматически генерируются файлы из самописного модуля. И мне бы хотелось иметь к ним доступный для админа url, то есть, чтобы он всё-таки обслуживался друпалом)
У меня что-то типа такого:
function mymodule_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
if ($entity->getEntityTypeId() == 'node' && $entity->getType() == 'mydocs') {
$phpWord = new \PhpOffice\PhpWord\PhpWord();
Теперь возник другой вопрос. Может сможете подсказать. Настроила приватную папку, всё ок. Настроила поле файл, теперь все загружаемые файлы уходят туда. Админу эти файлы доступны по ссылке, остальным нет.
Но в этой папке есть другая папка, в которую файлы грузятся не с полей, они там создаются программно. И админу ссылка на эти файлы выдает 403
Например сейчас есть папка 2025-06, в ней лежит файл, загруженный при создании материала. Он доступен по ссылке
а еще захожу в папку /sites/default/files/feeds и там тоже всё доступно для скачивания. Закрытые для анонимов материалы, импортируемые когда-то через csv лежат там, и их можно скачать неавторизованному пользователю. Поэтому очень хотелось бы как-то иметь возможность закрыть некоторые папки в публичной части
Вроде бы с этим разобрались, если с нуля делать поле, то всё уходит в приватную папку. Всё работает, просто не так смотрела.
Но вот что делать например с сайтом, где уже достаточно много контента... С полями, у которых уже есть файлы в публичной папке, но которые надо бы скрыть?
Спасибо) Код взяла с интернетов, тоже обратила внимание на in_array. У меня прописано !in_array, не работало. Я уже и так и эдак. Но в общем, дело было в кэше
Проверять разрешения в permissions.yml в моем случае как я понимаю не вариант. У меня же в перспективе на каждую сущность для одного пользователя могут быть разные права. Есть галочка - смотрящий, нет галочки - правящий.
Ну в данном случае да. Но это происходит и при удалении других модулей, там тоже сносятся какие-то созависимые модули. То есть да, я устанавливаю заново. Но это же как-то странно...
Всем спасибо. Проблема решена, это я дурачок. Обновила всё, потом была необходимость восстановить бэкап. Я его восстановила, но только папку web. Соответственно в composer остались прописаны новые версии.
да я не секретничаю, просто обновления требовались для 8 модулей, и это про всех них. Но спасибо, я разобралась, дело было в файле composer. А точнее в моей невнимательности)
Лучше вам этот вопрос решить с хостером. Есть хостинги, где всё очень просто: делегировали домен на хост, открепили старый домен от папки, прилинковали новый. Два домена, прилинкованные к одной папке - в некоторых ситуациях крайне нехорошо, в зависимости от функционала сайта. По идее дополнительно домен нигде не надо менять на сайте. Однако, если у вас например используется мультисайтинг (разные домены, разные сайты на разных языках, но с одной базой), то в этом случае в админке указываются домены.
Ошибка по идее не друпаловская. Попробуйте на том же сервере тестовое что-нибудь развернуть и вставить этот же айфрейм. Либо попробуйте зайти в админку с другого браузера. Или у себя кэши хорошо почистите. Везде какие можно. Посмотрите журнал, логи. Вообще погуглите саму ошибку вне контекста друпала.
Права доступа к default/files
Админ самый главный, первый. Он тоже получал 403
В общем сейчас всё разрешилось. Добавила вот:
mymodule_file_download(string $uri): ?array {
if (strpos($uri, 'private:') !== 0) {
return NULL;
}
if (!\Drupal::currentUser()->hasPermission('access private files')) {
return -1;
}
$file_repository = \Drupal::service('file.repository');
$file = $file_repository->loadByUri($uri);
$headers = file_get_content_headers($file);
return $headers;
}
Права доступа к default/files
В общем проблема была в том, что помимо самого файла и прав на него, надо еще иметь права на скачивание (для приватных файлов)
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21File%21fi...
Пока получается не очень, но уже лучше, чем было )
Права доступа к default/files
Вот например ссылка на файл, который я гружу в ноду, и по этой ссылке файл открывается
mysite.ru/system/files/2025-06/1.jpg
А вот ссылка на мой генерируемый файл
mysite.ru/system/files/my-dir/myfile74.docx
Она выдает 403
Вообще было бы здорово обойтись php://output но проблема в том, что я генерирую файл на основе шаблона. И в этом случае есть возможность только сохранять новый полноценный файл. С этим тоже долго разбиралась, и как поняла при использовании PhpOffice\PhpWord\TemplateProcessor невозможно вывести файл через php://output
Права доступа к default/files
Собственно всё как обычно. Одно получилось, но дальше всё равно не идет
Сделала вот так:
$uri = $PATH;
$data = file_get_contents($uri);
$fileRepository = \Drupal::service('file.repository');
$fileRepository->writeData($data, $uri, FileSystemInterface::EXISTS_REPLACE);
Всё отлично, друпал берет мои файлы, они появиляются в базе
Но админ снова видит 403
Решила продолжить в новой теме.
https://drupal.ru/node/146438
Тут уже далеко ушло от изначального вопроса)
Права доступа к default/files
Да, верно, папка есть и она за пределами корня. И в нее у меня прекрасно уходят файлы из полей сущностей, и они мне доступны по ссылке. И туда также автоматически генерируются файлы из самописного модуля. И мне бы хотелось иметь к ним доступный для админа url, то есть, чтобы он всё-таки обслуживался друпалом)
У меня что-то типа такого:
function mymodule_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
if ($entity->getEntityTypeId() == 'node' && $entity->getType() == 'mydocs') {
$phpWord = new \PhpOffice\PhpWord\PhpWord();
Права доступа к default/files
Теперь возник другой вопрос. Может сможете подсказать. Настроила приватную папку, всё ок. Настроила поле файл, теперь все загружаемые файлы уходят туда. Админу эти файлы доступны по ссылке, остальным нет.
Но в этой папке есть другая папка, в которую файлы грузятся не с полей, они там создаются программно. И админу ссылка на эти файлы выдает 403
Например сейчас есть папка 2025-06, в ней лежит файл, загруженный при создании материала. Он доступен по ссылке
Права доступа к default/files
спасибо! Попробую
Права доступа к default/files
а еще захожу в папку /sites/default/files/feeds и там тоже всё доступно для скачивания. Закрытые для анонимов материалы, импортируемые когда-то через csv лежат там, и их можно скачать неавторизованному пользователю. Поэтому очень хотелось бы как-то иметь возможность закрыть некоторые папки в публичной части
Права доступа к default/files
Вроде бы с этим разобрались, если с нуля делать поле, то всё уходит в приватную папку. Всё работает, просто не так смотрела.
Но вот что делать например с сайтом, где уже достаточно много контента... С полями, у которых уже есть файлы в публичной папке, но которые надо бы скрыть?
Помощь с hook_entity_access
Спасибо) Код взяла с интернетов, тоже обратила внимание на in_array. У меня прописано !in_array, не работало. Я уже и так и эдак. Но в общем, дело было в кэше
Проверять разрешения в permissions.yml в моем случае как я понимаю не вариант. У меня же в перспективе на каждую сущность для одного пользователя могут быть разные права. Есть галочка - смотрящий, нет галочки - правящий.
Paragraph feeds - всё работает, а в материал не уходит
А можно подробнее, как мигрировали?
hook_entity_insert
да, тоже была первая мысль, почему у меня тогда в presave всё работало. И да, модуль начинался с него.
hook_entity_insert
Спасибо! Блин, действительно, теперь работает.
privatemsg Новые сообщения
Да, спасибо! Невнимательно смотрела
privatemsg Новые сообщения
Да, это был тот блок. Все сообщения с количеством новых в скобках. Невнимательно смотрела.
privatemsg Новые сообщения
Нету. Только блок Личные сообщения, в котором ссылки на все свои сообщения и на написание нового сообщения.
Правильное удаление модулей Drupal 10
спасибо... казалось бы всё так удобно начиналось...
Правильное удаление модулей Drupal 10
Ну в данном случае да. Но это происходит и при удалении других модулей, там тоже сносятся какие-то созависимые модули. То есть да, я устанавливаю заново. Но это же как-то странно...
Просмотр материалов - доступ по ролям
Спасибо)
Обновление модулей на Drupal 10
Всем спасибо. Проблема решена, это я дурачок. Обновила всё, потом была необходимость восстановить бэкап. Я его восстановила, но только папку web. Соответственно в composer остались прописаны новые версии.
Обновление модулей на Drupal 10
да я не секретничаю, просто обновления требовались для 8 модулей, и это про всех них. Но спасибо, я разобралась, дело было в файле composer. А точнее в моей невнимательности)
Помощь с hook_entity_update, hook_entity_presave
Спасибо большое!
Пропали все права доступа
Ну предположение конечно совсем простое. Но там никаких дисплей-нон на table нет в инспекторе?
Смена домена на сайте друпал 7
Лучше вам этот вопрос решить с хостером. Есть хостинги, где всё очень просто: делегировали домен на хост, открепили старый домен от папки, прилинковали новый. Два домена, прилинкованные к одной папке - в некоторых ситуациях крайне нехорошо, в зависимости от функционала сайта. По идее дополнительно домен нигде не надо менять на сайте. Однако, если у вас например используется мультисайтинг (разные домены, разные сайты на разных языках, но с одной базой), то в этом случае в админке указываются домены.
Запрещено добавление видео с vk.com и rutube
Ошибка по идее не друпаловская. Попробуйте на том же сервере тестовое что-нибудь развернуть и вставить этот же айфрейм. Либо попробуйте зайти в админку с другого браузера. Или у себя кэши хорошо почистите. Везде какие можно. Посмотрите журнал, логи. Вообще погуглите саму ошибку вне контекста друпала.