J’ai un plugin qui ajoute un modèle, server, avec un champ user_id. Je veux que seul le propriétaire du server puisse effectuer une requête POST (ou peut-être devrais-je utiliser PUT ? — l’action déclenchera une reconstruction en ligne de commande d’une instance Discourse sur son serveur ; je ne suis pas sûr de ce qui serait la meilleure pratique.)
Dans config/routes.rb, voici ce qui est défini :
post “/upgrade/:id” => “servers#queue_upgrade”, constraints: PfaffmanagerConstraint.new
Est-il recommandé de vérifier path_parameters[:action] dans matches? de pfaffmanager_constraint.rb et d’y appliquer les autorisations, ou de le faire dans servers_controller.rb ?
De plus, je pense que ce que je devrais vraiment faire, c’est déplacer cette route sous namespace :user. Peut-être qu’une fois que j’aurai résolu cela, ce problème sera réglé dans le cadre de cette modification. Mais cela fonctionne presque, et j’aimerais passer à une phase où d’autres personnes pourront tester ce code.
Je pense que vous avez besoin d’une méthode de garde pour vérifier si un utilisateur est autorisé à effectuer une action donnée. Par exemple, can_upgrade_server?.
De plus, une fois cela fait, vous pouvez utiliser la méthode guardian.ensure_can_upgrade_server! qui vérifie la condition et lève une exception, ce qui est exactement ce que vous recherchez, selon moi.
Mais pour l’instant, je n’utilise pas guardian car je rencontre des difficultés pour comprendre comment l’instancier correctement. J’ai ceci dans mon contrôleur :