문제

I've created a plugin on redmine which modifies the core of RepositoryControler.

I've added a patch with new function inside this controller and I can call this function based on role permissions.

But to set up correctly the permissions I need to configure before_filter with authorization (:authorize) for my new function.

The trouble is because adding the before_filter inside my patch doesn't work and I don't know what is the best manner to do it. Following my code:

client.rb

module RepositoriesPatch
    require_dependency 'repositories_controller'

    def self.included(base)
      base.send(:include, InstanceMethods)
    end
end

module InstanceMethods

  require_dependency 'repositories_controller'

  #I THINK THE BEFORE_FILTER SHOULD BE PLACED HERE, BUT IT DIDN'T WORKED.
  # before_filter :authorize, :only => :exec_client   (????????)

   def exec_client
    begin
     ....
    end

end

Rails.configuration.to_prepare do
  RepositoriesController.send(:include, RepositoriesPatch)
end

init.rb

  permission :repositories, :repositories => :exec_client

  project_module :repository do
    permission :exec, :repository => :exec_client
  end

  Rails.configuration.to_prepare do
    RepositoriesController.send(:include, RepositoriesPatch)
  end

  settings :default => {'empty' => true}, :partial => 'settings/gerar_versao_configuration'
end
도움이 되었습니까?

해결책

before_filter must be evaluated inside the class as follows:

def self.included(base)
    base.send(:include, InstanceMethods)
    base.class_eval do
        unloadable
        before_filter :authorize, :only => :exec_client
    end
end

다른 팁

as an aside in Rails 4 introduced "before_action" which apparently over time will replace "before_filter"

Pierre

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top