如何在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继承。但我无法做到这一点,因为这里的引擎是外部宝石。 (或者有没有办法改变继承类?)