Ich habe ein Plugin, das ein Modell namens server hinzufügt, das ein Feld user_id besitzt. Ich möchte, dass nur der Besitzer des server einen POST-Aufruf tätigen kann (oder sollte es vielleicht ein PUT sein? – die Aktion führt eine Neukompilierung einer Discourse-Instanz über die Kommandozeile auf ihrem Server durch; ich bin mir nicht sicher, was hier die Best Practice wäre.)
In config/routes.rb steht Folgendes:
post “/upgrade/:id” => “servers#queue_upgrade”, constraints: PfaffmanagerConstraint.new
Ist es empfehlenswert, dass matches? in pfaffmanager_constraint.rb die path_parameters[:action] prüft und die Berechtigung dort erzwingt, oder sollte dies in servers_controller.rb geschehen?
Außerdem denke ich, dass ich diesen Pfad eigentlich unter namespace :user verschieben sollte. Vielleicht löst sich das Problem dann von selbst, sobald ich das geklärt habe. Aber das hier funktioniert fast, und ich möchte, dass andere Leute diesen Code ausprobieren können.
Die Rails-Route finden Sie hier:
https://github.com/pfaffman/discourse-pfaffmanager/blob/master/config/routes.rb#L12
Und mein Controller versucht, die Berechtigungen durchzusetzen:
Aber mein Test (Spec) liefert einen Statuscode 200 zurück, wenn ein anderer Benutzer den POST-Aufruf tätigt:
Ich vermute, ich muss irgendwie dafür sorgen, dass Ember darauf achtet?