从引擎调用应用程序控制器方法

时间:2014-04-16 20:06:24

标签: ruby-on-rails ruby ckeditor rails-engines

如何在rails引擎中调用ApplicationController中的方法?

我们正在使用ckeditor gem在我们的rails应用中集成ckeditor。由于我们实现了自己的授权系统,我需要创建一个自定义的ckeditor授权挂钩,它需要获取current_user对象来决定是否允许该用户使用引擎控制器操作。

我在mail_app ApplicationController中定义了current_user,我想从CKeditor :: ApplicationController调用它。

我在这里包含了我的代码

配置/ inititializers / ckeditor.rb

Ckeditor.setup do |config|
  config.current_user_method  do
    current_user
  end
  config.authorize_with :chronus
end

LIB / CKEditor的/钩/ chronus.rb

module Ckeditor
  module Hooks
    class ChronusAuthorization

      include Ckeditor::Helpers::Controllers

      def initialize(controller)
        @controller = controller
        @controller.extend ControllerExtension
      end

     def authorize(action, model_object = nil)
        raise Authorization::PermissionDenied unless authorized?(action, model_object)
      end

      def authorized?(action, model_object = nil)
        if action
          if @controller.current_user_for_chronus.is_admin?
            [:index, :create, :destroy].include? action
          else
            [:create].include? action
          end
        end
      end

      private

      module ControllerExtension
        def current_user_for_chronus
          ckeditor_current_user
        end
      end
    end
  end
end

Ckeditor::AUTHORIZATION_ADAPTERS[:chronus] = Ckeditor::Hooks::ChronusAuthorization

rails指南中有suggestion,可以使引擎的作用域ApplicationController从主ApplicationController继承。但我无法做到这一点,因为这里的引擎是外部宝石。 (或者有没有办法改变继承类?)

0 个答案:

没有答案
相关问题