Вызвать метод контроллера приложения из движка

Как мне вызвать метод из ApplicationController в движке рельсов?

Мы используем ckeditor gem для интеграции ckeditor в наше приложение rails. Так как мы внедрили нашу собственную систему авторизации, мне нужно сделать собственный хук авторизации ckeditor, который должен получить объект current_user, чтобы решить, разрешено ли действие контроллера двигателя для этого пользователя.

У меня есть current_user, определенный в mail_app ApplicationController, я хочу вызвать его из CKeditor::ApplicationController.

Я включил свой код здесь

конфиг /inititializers/ckeditor.rb

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

Библиотека / 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

В руководстве по рельсам есть предложение сделать наследуемый ApplicationController движка наследуемым от основного ApplicationController. Но я не могу этого сделать, потому что двигатель здесь - это внешняя жемчужина. (Или есть способ изменить класс наследования?)

0 ответов

Другие вопросы по тегам