Lista de controle de acesso como código

Estou ciente de Discourse Patreon. Embora minha pergunta envolva o Patreon, o “plugin Patreon” não é a solução que estou procurando.

Existe uma maneira elegante de estender uma classe Ruby para especificar, via código, uma lista de controle de acesso (ACL)?

Por exemplo: quero garantir que apenas membros do Patreon possam postar em um determinado fórum; que apenas pessoas de um certo nível de confiança possam responder, etc… mas não quero isso como caixas de seleção em alguma interface gráfica. Quero poder estender alguma classe em Ruby e, via código, especificar a lista de controle de acesso.

Isso é algo fácil ou difícil de fazer no Discourse?

Você pode fazer qualquer coisa que quiser em um plugin.

Não recomendo gerenciar listas de controle de acesso (ACLs) no código. Claro, você pode alterar comportamentos e regras, mas o controle de acesso deve ser o mais transparente e intuitivo possível para o administrador, não é? Além disso, haverá momentos em que você precisará fazer uma alteração com urgência. Você não quer depender de uma liberação de código para isso!

Tente entender completamente o modelo existente e veja se consegue alcançar o que precisa sem alterações no código. A segurança é um elemento muito importante, mas delicado, e enquanto você aproveitar o framework existente, a equipe do Discourse estará ao seu lado. Se você mudar as coisas, estará sob maior risco e por conta própria.

Lembre-se também de que as alterações do seu plugin precisam ser robustas à evolução do núcleo. As substituições devem ser escritas de forma que seja mais provável que continuem funcionando conforme o código original evolui. Esse é um equilíbrio delicado e representa uma sobrecarga de manutenção. Não conseguir atualizar sua instância porque o plugin quebraria é, em si, um risco de segurança.

No final das contas, os plugins são especialmente adequados para alterações mais superficiais e inofensivas, mas aplicá-los à camada de segurança deve ser feito apenas após uma consideração séria. Existem exceções, como os plugins OAuth, que funcionam com recursos da plataforma que permitem adicionar novos provedores de forma segura.

Dito tudo isso, boa sorte!

1 curtida