Ho un plugin che aggiunge un modello, server, con un campo user_id. Voglio che solo il proprietario del server possa eseguire una POST (o forse dovrebbe essere una PUT? L’azione eseguirà un rebuild da riga di comando di un’istanza di Discourse sul loro server; non sono sicuro di quale sia la migliore pratica.)
In config/routes.rb c’è questo:
post “/upgrade/:id” => “servers#queue_upgrade”, constraints: PfaffmanagerConstraint.new
È consigliabile che matches? in pfaffmanager_constraint.rb controlli path_parameters[:action] e applichi i permessi lì, oppure farlo in servers_controller.rb?
Inoltre, penso che dovrei davvero spostare questa rotta sotto namespace :user, quindi forse dopo aver risolto questo problema, la questione si risolverà come parte di quel processo, ma questo funziona quasi, e vorrei passare a far provare questo codice ad altre persone.
Credo che tu abbia bisogno di un metodo di guardia per verificare se un utente è autorizzato a eseguire una determinata azione. Ad esempio, can_upgrade_server?
Inoltre, una volta fatto ciò, puoi utilizzare il metodo guardian.ensure_can_upgrade_server! che verifica la condizione e solleva un’eccezione, il che, a mio avviso, è esattamente ciò che desideri.