Вызвать метод контроллера приложения из движка
Как мне вызвать метод из 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. Но я не могу этого сделать, потому что двигатель здесь - это внешняя жемчужина. (Или есть способ изменить класс наследования?)