Как использовать before_filter внутри модификации ядра в Redmine

Я создал плагин для redmine, который модифицирует ядро ​​RepositoryControler.

Я добавил патч с новой функцией внутри этого контроллера, и я могу вызывать эту функцию на основе разрешений роли.

Но чтобы правильно настроить разрешения, мне нужно настроить before_filter с авторизацией (:authorize) для моей новой функции.

Проблема в том, что добавление before_filter в мой патч не работает, и я не знаю, как это сделать лучше всего. Следуя моему коду:

клиент.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

person kamusett    schedule 24.10.2013    source источник


Ответы (2)


before_filter должен оцениваться внутри класса следующим образом:

def self.included(base)
    base.send(:include, InstanceMethods)
    base.class_eval do
        unloadable
        before_filter :authorize, :only => :exec_client
    end
end
person Andriy Lesyuk    schedule 24.10.2013
comment
Работает идеально и плавно. Спасибо. - person kamusett; 25.10.2013

в качестве отступления в Rails 4 введено «before_action», которое, по-видимому, со временем заменит «before_filter»

Пьер

person user1854802    schedule 24.10.2013