2017-04-07 31 views
1

如何在沒有基於其他模型對象的模型的情況下授權來自控制器的操作?嵌套資源的權威無頭策略

假設我有一個名爲Server的模型,並且我有一個名爲config_files_controller的嵌套控制器,它沒有相應的模型。

我希望能夠基於Server對象和當前用戶以及爲Server定義的策略來授權來自config_files_controller的操作。

在routes.rb中我有:

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

的config_files_controller.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 

在configuration_file_policy.rb我想有這樣的事情:

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

我知道我是過於複雜了!謝謝! –