Ban members from certain categories?

AI-generated summary

The discussion revolves around the inability to ban users from specific categories in Discourse, as there is no native feature to restrict access via negative permissions (e.g., ‘cannot see’). Users propose workarounds using groups: adding all users to a category-specific group and removing banned users. However, this becomes impractical with large user bases. Some suggest a plugin or feature allowing dynamic groups with set operations (e.g., AccessGroup - BannedGroup) to simplify access control. dylanh724 highlights the need for a more efficient solution, while kevincox advocates for user-defined automatic groups to manage permissions more flexibly. Moin points to the dynamic groups plugin as a potential solution. tobias eigen and Falco confirm the current group-based workaround, though it’s not ideal.

Most of our forum is pretty general. However, one part is a “forum game”. If you get caught cheating, you get banned from playing. However, we can’t actually ban them from that specific category … or can we? It’s getting hard to moderate.

EDIT: A workaround, I made a group to store the people suspended from a certain category. However, it would be great if I could natively ban people from certain categories (with the see/create/reply permission options).

1 лайк

I think the only way to do this would be to create a group that includes everyone who is allowed to be in the category.

It would be nice to have a negative category permission available on category security settings, e.g. “Cannot create/reply/see”. But that does not exist now.

2 лайка

This is 100% covered by groups, just remove the cheaters from the game group and they can’t access the category anymore.

3 лайка

So default put everyone in a “game” group, then REMOVE them as they are suspended? Interesting

5 лайков

Извините за некрономанию, но это лучший результат при поиске, а другие темы (ссылки ниже) либо закрыты, либо не так четко отвечают на вопрос.

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

Это выглядит логично, но предположим, что в вашем инстансе 5000 пользователей: нужно ли добавлять их всех вручную? И обновлять список каждый раз, когда присоединяется новый пользователь? Я не уверен, есть ли какой-то «чит-код» вроде «@все» при добавлении пользователей в группу — похоже, что нет.

Есть ли лучший способ, который я упустил?

Спасибо.

Другие связанные темы:

2 лайка

Правильно… Нет хорошего способа заблокировать кого-то только в одной категории. Это случается нечасто. Обычно, если вы хотите кого-то заблокировать, то делаете это везде. Можно было бы через консоль Rails добавить всех в группу, а затем удалить нужного человека, но это было бы неудобно.

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

3 лайка

Я бы тоже с радостью увидел это. У нас тоже похожая ситуация.

  1. У нас есть несколько категорий, доступных только определённым группам.
  2. Но нам также нужно иметь возможность исключать из них отдельных пользователей.

Поддержка отрицательного членства в категориях решила бы задачу. Однако, на мой взгляд, более мощным и гибким решением было бы внедрение автоматически создаваемых групп, определяемых пользователем (как это уже реализовано для группы «staff»). Такие группы могли бы поддерживать базовые операции над множествами для определения членства.

Например, с этой функцией группа «staff» не была бы исключением, а просто определялась бы как admin + moderators. Тот факт, что такая автоматическая группа уже создана, является сильным указанием на то, что эта функция полезна и должна быть расширена до общей возможности, а не оставаться встроенным исключением.

С её помощью можно было бы реализовать отрицательное исключение, создав группу HasAccess = AccessGroup - BannedGroup.

Такие автоматические группы были бы очень полезны и для других сценариев. Например:

Увеличивающиеся ранги

В настоящее время у нас есть несколько закрытых форумов, которые в основном охватывают более узкие круги людей. Что-то вроде:

  • Admin = Admin
  • Moderators = Admin + Moderators
  • BetaTeam = Admin + Moderators + Beta
  • Trusted = Admin + Moderators + Beta + Trusted

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

  • ModeratorsOrHigher = Admin + Moderators (это уже реализовано как встроенная автогруппа staff)
  • BetaOrHigher = ModeratorsOrHigher + Beta
  • TrustedOrHigher = BetaOrHigher + Trusted

Общие группы

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

Вы уже посмотрели плагин динамических групп?

2 лайка