user_id フィールドを持つ server モデルを追加するプラグインを持っています。server の所有者のみが POST(あるいは PUT かもしれません——このアクションはサーバー上の Discourse インスタンスをコマンドラインで再構築するものです)を実行できるようにしたいと考えています。どちらがベストプラクティスなのか確信が持てません。
config/routes.rb には以下のような記述があります:
post “/upgrade/:id” => “servers#queue_upgrade”, constraints: PfaffmanagerConstraint.new
pfaffmanager_constraint.rb 内の matches? で path_parameters[:action] をチェックし、そこで権限を強制することをお勧めしますか、それとも servers_controller.rb で行うべきでしょうか?
また、実際にはこのルートを変更して namespace :user の下に移動すべきだと思っています。そのため、この問題を解決すれば、その過程でこの問題も解決されるかもしれません。しかし、このコードはほぼ機能しており、他の人にもこのコードを試してもらいたいと考えています。
Rails のルートは以下にあります:
https://github.com/pfaffman/discourse-pfaffmanager/blob/master/config/routes.rb#L12
また、私のコントローラーでは権限の強制を試みています:
https://github.com/pfaffman/discourse-pfaffmanager/blob/master/app/controllers/pfaffmanager/servers_controller.rb#L53-L70
しかし、異なるユーザーが post を実行した際に、仕様テストでは 200 が返ってきています:
https://github.com/pfaffman/discourse-pfaffmanager/blob/master/spec/requests/servers_controller_spec.rb#L149-L157
どうやら、Ember にも何らかの方法でこれに対応させる必要があるようです。