Я бы тоже с радостью увидел это. У нас тоже похожая ситуация.
- У нас есть несколько категорий, доступных только определённым группам.
- Но нам также нужно иметь возможность исключать из них отдельных пользователей.
Поддержка отрицательного членства в категориях решила бы задачу. Однако, на мой взгляд, более мощным и гибким решением было бы внедрение автоматически создаваемых групп, определяемых пользователем (как это уже реализовано для группы «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
Общие группы
Также для нас типично наличие нескольких категорий с абсолютно одинаковыми правилами доступа. Это, по сути, более простой случай, чем описанный выше, но было бы удобно создать одну автогруппу и использовать её многократно, вместо того чтобы повторять весь список групп и синхронизировать его во многих категориях.