Компонент темы для скрытия тем, если пользователь входит в определенную группу

Что именно вы хотите сделать?

Я хочу скрыть темы на странице «Последние» для пользователей, состоящих в определённой «плохой» группе. Я полагаю, что это можно реализовать с помощью компонента темы, но открыт к другим идеям. Это разовый случай, и мне не нужен интерфейс для редактирования параметров.

Вот похожая попытка, возможно, она послужит отправной точкой. Подход заключается в использовании api.modifyClass для добавления класса к темам (строкам <tr> на странице «Последние»), а затем нескольких строк CSS, чтобы скрыть этот класс через display: none. Предполагаю, что в modifyClass можно получить информацию о пользователе и добавить класс, если пользователь состоит в «плохой» группе.

(Я понимаю, что это не влияет на их права доступа: они всё ещё могут видеть тему в разделах «Категории» или «Поиск», получать уведомления по электронной почте, могут обнаружить мою хитрость и изменить свой локальный CSS и так далее. Мне просто нужно создать неудобства и побудить их предпринять какие-то действия. Учитывая все ограничения, я считаю, что этот подход сработает.)

К какому сроку это должно быть готово?

В ближайшие несколько недель.

Какой ваш бюджет в долларах США, который вы готовы предложить за эту задачу?

Готов обсудить любые предложения.

1 лайк

Вы хотите, чтобы для этих пользователей /latest был пустым? Или просто скрыть некоторые темы?

Цель в том, чтобы их раздражать? (потому что они раздражают всех)? Просто интересно, есть ли способ раздражать их получше.

2 лайка

Я забыл упомянуть, что мы всё ещё хотим разрешить им видеть одну тему в разделе «Последние»: обновлённые Условия использования.

Мне это тоже не очень нравится, но это лучшее, что я могу придумать. Цель — заставить всех пользователей подписать обновлённые Условия использования, придав этому приоритет выше обычного. На странице How to force existing users to accept ToS обсуждалось, что, возможно, поможет Политика Discourse. Однако Политика ничего не принуждает, и из-за важности новых Условий использования нам нужно нечто большее, чем просто синий пузырёк для напоминания пользователям. Несколько лет назад мы разработали плагин, который добавлял участников в группу после принятия ими политики, и это работало для некоторых задач, но я не вижу, как применить это в данном случае.

У нас уже есть довольно сложная система групп и категорий, поэтому мы не можем просто изменить права доступа для каждой категории с «все» на «tos-acceptors». Если бы права доступа к категориям поддерживали булеву логику, возможно, мы могли бы изменить их так, чтобы доступ был только у пользователей, состоящих одновременно в группах «premium-group» и «tos-acceptors». Но такой поддержки нет.

У меня нет чёткого мнения о том, как именно напоминать пользователям. Если бы в политике Discourse была встроенная принудительная проверка, я бы использовал её. Но в данном случае нам нужно больше, чем просто синий пузырёк.

Я также кратко рассматривал вариант перенаправления пользователей с постоянными ссылками, если они не состоят в группе «tos-acceptors». Это всё ещё возможно, если мы сможем добавить идентификатор пользователя или имя пользователя в URL постоянной ссылки в виде параметров запроса. Если мы перенаправим их, например, на Docusign, я могу настроить веб-хук для добавления их в группу «tos-acceptors», чтобы перенаправление прекратилось. Звучит ли это как более хороший план?

1 лайк

Возможно, стоит посмотреть на один из существующих компонентов «Gate» и скорректировать их критерии? У них довольно раздражающие блокираторы, и они сообщают пользователям, что от них ожидается, простым и прямым языком.

3 лайка

Вы можете направить пользователей на принятие Условий использования, используя некоторые функции плагина Discourse Custom Wizard:

https://discourse.pluginmanager.org/t/wizard-settings/226

Определённо есть возможности для установки условных переходов на основе членства в группах и изменения членства в группах по результатам работы мастера.

1 лайк

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

Например, с помощью формулы ссылок в текстовом поле:
(#tos-acceptor or #direct-concern) and #premium-group

1 лайк

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.