Бан категорий не поддерживается, но возможно ли это с помощью плагина?

Я прочитал эту тему, где в основном указано, что эта функция не считается необходимой, поэтому я не буду просить о её добавлении снова.

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

Эти суб-сообщества принимают основные правила доски, но также имеют свои дополнительные специфические правила и выделенную команду, которая должна не только модерировать раздел, но и руководить им, хотя это не суть дела.

Модераторы категорий не могут действовать в отношении самих пользователей, только в отношении категории. Однако в моём случае они должны иметь возможность запрещать некоторым пользователям участвовать, если те нарушают правила их суб-форума.

Мне на самом деле нужно лишь узнать, достаточно ли детализированы основные функции, чтобы позволить модераторам категорий блокировать конкретных пользователей от доступа к их категории.

Как я это представляю: создаётся пользовательская таблица, в которую добавляются category_id и user_id, и когда пользователь пытается получить доступ к конкретной теме или категории, система просто проверяет эту таблицу.

Неужели я так сильно заблуждаюсь? Было бы это осуществимо? У меня много опыта в разработке программного обеспечения, но почти ничего в Ruby, поэтому я не совсем понимаю, с чего начать изучение исходного кода Discourse, чтобы понять, куда именно смотреть :weary:

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

Отличная тема для обсуждения.

Самый простой способ решить это — использовать уровни доверия.

Снижайте уровень доверия пользователям, которых нужно «банить», и установите требование высокого уровня доверия для категории.

У меня недавно была точно такая же ситуация: я просто ограничил пользователя уровнем доверия 1, а для категории требовался уровень 2. Проблема решена!

Я поступил так же. И поскольку я не позволяю никому автоматически повышаться выше уровня TL 2, это стало ментально и административно очень простым и не запутанным решением. В этом также была доля элегантности :wink:

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

«Бан» сводился к простому удалению соответствующего членства, что означало нулевую нагрузку на администрацию.

Это потребовало немного усилий для старта, но после этого — практически никаких затрат.

Но как это сделать, если группа динамическая?

Пример: у одного из моих клиентов есть форум с категорией «Продажа», доступной для пользователей с уровнем TL2 и выше.
Они хотят запретить определённым участникам создавать темы в этой категории, но для этого им пришлось бы создавать и поддерживать группу, содержащую тех же людей, что и в TL2, за исключением 5 конкретных пользователей.

Предположительно, так же: провижать пользователей в группы на основе критериев (например, обнаружение повышения до TL2), а затем при необходимости удалять их из них? Тот факт, что TL2 является критерием входа, не означает, что для определения членства нужно полагаться именно на этот статус, верно? Всё также зависит от того, есть ли у вас время и ресурсы для разработки решения на базе вашего инстанса или вокруг него.

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

Но если мы всё равно что-то разрабатываем на инстансе, то я бы предпочёл функционал блокировки категорий :sunglasses:

Это также упрощает поддержку. Если у меня 50 000 пользователей, и мне нужно, чтобы все они имели доступ к категории, кроме нескольких, то составить список этих нескольких сложно.

Я имею в виду, что «бан» — это просто ещё одно слово для «исключения», а в Discourse разрешения на исключение в принципе нет. Нужно ли оно, когда «не включение» по сути то же самое? Мне нравится явная модель разрешений — она делает устранение неполадок безболезненным.

У меня до сих пор бывают кошмары о попытках разобраться с моделью разрешений/запретов из vBulletin много лет назад. Единственное, с чем я сталкивался, что вызывало ещё больше боли и технического долга, — это RSOP.

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

Я бы сказал, что да.

@crius это можно реализовать с помощью плагина. Думаю, вы можете добиться значительных результатов на стороне клиента, переопределив permissions в сериализаторе категории, а на стороне сервера — добавив дополнительную проверку с помощью NewPostManager.add_handler.

Вы рассматривали возможность использования групп? Создайте категорию с двумя группами для управления доступом. Одна группа — это модераторы вашей категории. Другая — участники подфорума. Группа участников обязана запрашивать доступ к области подфорума. Некоторые или все модераторы категории являются владельцами этой группы. Если участник нарушает правила и его необходимо исключить из подфорума, исключите его из группы участников и согласуйте с другими модераторами категории срок блокировки.

К сожалению, возможно, вам придётся рассмотреть возможность спонсирования плагина. Это как раз тот случай, где краудфандинг плагинов был бы отличной идеей. Команда разработчиков ядра в конечном итоге может добавить что-то подобное к тому, что вы просите, но это может занять время из-за приоритетов в списке разработки.

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

Ты точно уверен, что задал правильный вопрос :wink:

Я имею в виду, что твоя главная цель — решить одну проблему, а запрет категории — это лишь твой нерешённый ответ на неё. Правильный вопрос звучал бы так: как мне решить проблему X и какие у меня есть варианты.

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

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

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

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

Огромная любовь @RGJ за то, что поделился своими мыслями :heart: