Привет! Я хотел бы пересобрать приложение, включив в него изменения в файле, чтобы отключить функцию поиска для анонимных пользователей (не просто через CSS).
Может ли кто-нибудь предоставить документацию по синтаксису этих хуков для частей from: и to:?
- replace:
filename: "/var/www/discourse/app/assets/javascripts/discourse/app/components/search-menu.js"
from: /get classNames()/
to: |
if (!this.currentUser) {return false;} get classNames()
Discourse сейчас принимает этот синтаксис, но в конце пересборки возникает ошибка:
Error: Parse Error at discourse/components/search-menu.gjs:88:7"
replace failed with the params {"filename"=>"/var/www/discourse/app/assets/javascripts/discourse/app/components/search-menu.gjs", "from"=>"/get classNames()/", "to"=>"if (!this.currentUser) {return false;} get classNames()\n"}
Спасибо, что обратили на это внимание. Уточните, пожалуйста, как называется скрытая настройка сайта? И полностью ли она отключает поиск для анонимных пользователей или просто скрывает результаты? Я ищу способ блокировать доступ на уровне контроллера, поэтому интересно, достаточно ли только этой настройки или всё же потребуется какой-то собственный код.
Теперь страница /search недоступна — отлично.
Теперь кнопка поиска на фронтенде мгновенно возвращает сообщение: «Вы выполнили это действие слишком много раз» — отлично.
Вы можете скрыть кнопку поиска с помощью:
Но возникает вопрос: достаточно ли этого? Может ли кто-нибудь просто создать простой cookie-файл сессии, чтобы притвориться авторизованным пользователем и получить доступ к содержимому сайта через поиск?
Более тщательное, но неполное решение:
Файл: /var/www/discourse/app/controllers/search_controller.rb
Изменение: добавьте «if current_user.present?» после «def show» и добавьте «end» в конце условия.
Однако мне не удалось сделать это изменение постоянным после перезапуска. Поэтому любой, кто знает, как сделать это постоянным после перезапуска с помощью функции app.yml hooks after_code replace, может поделиться решением.
Я имею в виду неавторизованного пользователя, который мог бы создать cookie-файл сессии, чтобы притвориться авторизованным, но, возможно, я зашел слишком далеко, так как, полагаю, функция currentUser проверяет ключ сессии.
«Это была бы проблема безопасности. Если вам удастся этого добиться, обязательно сообщите об этом на HackerOne»
Нет, я новичок в Discourse, я даже не могу правильно оформить цитату Я просто спрашивал, вдруг здесь есть кто-то из инженеров Discourse В любом случае, мы нашли решение для этой ветки благодаря вам, Фалько.
но не стесняйтесь попробовать следующее на уровне контроллера:
/var/www/discourse/app/controllers/search_controller.rb
Изменение: добавьте « if current_user.present? » после « def show » и добавьте « end » в конце условия.