Wie kann ich eine Aktion von einem Controller ohne ein Modell basierend auf einem anderen Modellobjekt autorisieren?Pundit kopflose Richtlinie für verschachtelte Ressource
Nehmen wir an, ich habe ein Modell namens Server und ich habe einen verschachtelten Controller namens config_files_controller, der kein entsprechendes Modell hat.
Ich möchte in der Lage sein, die Aktionen von der config_files_controller basierend auf einem Server-Objekt und aktuellen Benutzer und den für Server definierten Richtlinien zu autorisieren.
In routes.rb ich habe:
resources :servers do
resources :config_files do
collection do
get 'load_file'
end
end
end
Die config_files_controller.rb sieht ungefähr so aus:
class ConfigFilesController < ApplicationController
before_filter :authenticate_user!
before_filter :load_server
def index
# displays file names
end
def load_file
# gets file content
end
private
def load_server
@server = Server.find(params[:server_id])
authorize :config_file, "#{action_name}?"
end
end
In configuration_file_policy.rb würde ich so etwas haben mag:
class ConfigurationFilePolicy < Struct.new(:user, :configuration_file, :server)
def index?
ServerPolicy.new(user, server).show?
end
def load_file?
ServerPolicy.new(user, server).update?
end
end
Ich vermisse wahrscheinlich etwas oder ich sehe nur die offensichtliche Lösung nicht. Jeder Vorschlag wäre willkommen!
Danke!
Ich wusste, dass ich es war overcomplicating! Vielen Dank! –