Eu também adoraria ver isso. Nós também temos uma situação semelhante.
- Temos algumas categorias restritas a certos grupos.
- Mas também precisamos ser capazes de excluir certas pessoas delas.
Ter associação negativa de categoria funcionaria. Mas eu acho que uma solução mais poderosa e flexível seria ter grupos automáticos definidos pelo usuário (como staff é hoje). Esses grupos poderiam suportar operações de conjunto básicas para determinar a associação.
Por exemplo, com este recurso, staff não precisaria ser um caso especial, mas poderia ser apenas admin + moderators. O fato de este grupo automático ter sido criado é realmente uma forte indicação de que este recurso é útil e deve ser estendido para um recurso geral, em vez de ser embutido.
Com isso, você poderia implementar a exclusão negativa tendo um grupo HasAccess = AccessGroup - BannedGroup.
Esses grupos automáticos também seriam muito úteis para outros casos de uso. Por exemplo:
Incrementando Patentes
Atualmente, temos alguns fóruns bloqueados que basicamente abrangem círculos menores de pessoas. Algo como:
- Admin = Admin
- Moderators = Admin + Moderators
- BetaTeam = Admin + Moderators + Beta
- Trusted = Admin + Moderators + Beta + Trusted
Precisar aplicar a lista correta de grupos a cada categoria é tedioso e propenso a erros. Tivemos muitos casos em que um grupo estava faltando em uma categoria à qual deveria ter tido acesso. Poder definir grupos como este tornaria isso muito mais fácil de gerenciar:
- ModeratorsOrHigher = Admin + Moderators (isso é embutido como o grupo automático
staff) - BetaOrHigher = ModeratorsOrHigher + Beta
- TrustedOrHigher = BetaOrHigher + Trusted
Grupos Comuns
Também é comum termos várias categorias que têm exatamente o mesmo conjunto de regras de acesso. Este é basicamente um caso mais simples do que o acima, mas seria bom poder criar apenas um grupo automático e usá-lo várias vezes, em vez de precisar repetir toda a lista de grupos e mantê-la sincronizada em várias categorias.