Tenho um plugin que adiciona um modelo, server, que possui um campo user_id. Quero que apenas o proprietário do server possa fazer um POST (ou talvez deveria ser um PUT? — a ação executará uma reconstrução via linha de comando de uma instância do Discourse no servidor deles; não tenho certeza de qual seria a melhor prática.)
Em config/routes.rb, está assim:
post “/upgrade/:id” => “servers#queue_upgrade”, constraints: PfaffmanagerConstraint.new
É recomendado que matches? em pfaffmanager_constraint.rb verifique path_parameters[:action] e aplique a permissão ali, ou devo fazer isso em servers_controller.rb?
Além disso, acho que o que realmente deveria fazer é mover essa rota para dentro de namespace :user. Talvez, depois que eu resolver isso, o problema seja resolvido como parte dessa mudança, mas isso quase funciona, e gostaria de permitir que outras pessoas testem esse código.
Acho que você precisa de um método guardião para verificar se um usuário tem permissão para executar uma determinada ação. Por exemplo: can_upgrade_server?
Além disso, ao fazer isso, você pode usar o método guardian.ensure_can_upgrade_server!, que verifica a condição e lança uma exceção, o que, na minha opinião, é exatamente o que você deseja.
Mas, por enquanto, não estou usando o guardian porque estou tendo dificuldade em descobrir como instanciá-lo corretamente. Tenho o seguinte no meu controlador: