2017-04-07 23 views
1

別のモデルオブジェクトに基づくモデルのないコントローラからアクションを認可するにはどうすればよいですか?ネストされたリソースのPundit headlessポリシー

私はServerというモデルがあり、対応するモデルを持たないconfig_files_controllerというネストされたコントローラがあります。

私は、サーバーオブジェクトと現在のユーザーとサーバーに定義されたポリシーに基づいて、config_files_controllerからアクションを許可する必要があります。私が持っているroutes.rbをで

resources :servers do 
    resources :config_files do 
    collection do 
     get 'load_file' 
    end 
    end 
end 

config_files_controller.rbはこのようなものになります。

:configuration_file_policy.rbで

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 

を私はこのような何かを持っていると思います

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 

私はおそらく何かが不足している、または私は明らかな解決策を見ていないだけです。どんな提案もありがとう!

ありがとうございます!

答えて

1

コントローラが@serverオブジェクトを設定し、Serverがモデルのようです。したがって、それを承認するだけで十分です。 (ConfigurationFilePolicyの必要はありません。)

config_files_controller.rb

... 

def index 
    authorize @server, :show? 
    # displays file names 
    ... 
end 

def load_file 
    authorize @server, :update? 
    # gets file content 
    ... 
end 

https://github.com/elabs/pundit#policies

+0

私はそれを過度に複雑知っていました!ありがとうございました! –

関連する問題