Als ich Plugins erstellt habe, bin ich ein paar Mal auf die Notwendigkeit gestoßen, das Ergebnis von Guardiancan_* Prüfungen zu ändern. Ich bin wieder auf dieses Problem im ActivityPub Plugin gestoßen:
Ich habe gerade einen Entwurf eines PR eingereicht, der eine neue serverseitige Plugin-API-Methode hinzufügt, mit der Sie Vor- und Nachprüfungen für Guardian can_* Methoden registrieren können, wodurch die Möglichkeit besteht, das Ergebnis der Methode zu ändern. Zum Beispiel:
add_guardian_check(:before, :edit_post) do |guardian, result, post|
!post.activity_pub_remote?
end
Ich bin gespannt auf Feedback sowohl zum Ansatz als auch zur Ausführung, bevor ich es zur Überprüfung veröffentliche.
Ich sehe keine Probleme mit der before_*-Registrierung. Die after_*-Registrierung ist etwas kniffliger. Aus Sicherheitssicht bedeutet die after_*-Registrierung, dass Plugins den Kern auf unsichere Weise überschreiben können. Offensichtlich können Plugins dies auf vielfältige Weise tun, aber die Plugin-API sollte dies nicht noch weiter erleichtern.
Außerdem, was passiert, wenn mehrere Plugins den after_*-Hook verbrauchen? Welches gewinnt?