Tengo un plugin que agrega un modelo, server, el cual tiene un campo user_id. Quiero que solo el propietario del server pueda realizar una POST (o quizás debería ser un PUT? —la acción ejecutará una reconstrucción desde la línea de comandos de una instancia de Discourse en su servidor—; no estoy seguro de cuál sería la mejor práctica.)
En config/routes.rb está esto:
post “/upgrade/:id” => “servers#queue_upgrade”, constraints: PfaffmanagerConstraint.new
¿Se recomienda que matches? en pfaffmanager_constraint.rb verifique path_parameters[:action] y aplique el permiso allí, o hacerlo en servers_controller.rb?
Además, creo que lo que realmente debería hacer es mover esta ruta bajo namespace :user, por lo que quizás después de resolver eso, este problema se solucionará como parte de ese cambio. Sin embargo, esto casi funciona y me gustaría pasar a que otras personas prueben este código.
Creo que necesitas un método de guardian para verificar si un usuario tiene permiso para realizar una acción determinada. Por ejemplo, can_upgrade_server?
Además, una vez que lo hagas, puedes usar el método guardian.ensure_can_upgrade_server!, que verifica la condición y lanza una excepción, lo cual creo que es exactamente lo que necesitas.