Algo que encontrei algumas vezes ao construir plugins é a necessidade de modificar o resultado das verificações can_* do Guardian. Encontrei novamente no Plugin ActivityPub:
Acabei de levantar um PR rascunho que adiciona um novo método de API de plugin do lado do servidor que permite registrar verificações antes e depois dos métodos can_* do guardian, oferecendo a capacidade de alterar o resultado do método. Por exemplo
add_guardian_check(:before, :edit_post) do |guardian, result, post|
!post.activity_pub_remote?
end
Estou curioso para obter feedback sobre a abordagem e a execução antes de publicá-la para revisão.
Não vejo nenhum problema com o registro before_*. O registro after_* é um pouco mais complicado. Em termos de segurança, o registro after_* significa que os plugins podem substituir o núcleo de maneiras que podem ser inseguras. Obviamente, os plugins podem fazer isso de várias maneiras, mas a API de plugins não deve facilitar isso ainda mais.
Além disso, o que acontece se vários plugins consumirem o hook after_*? Qual deles vence?