Я думаю, что самое простое решение - это определение monkey-patch forem для добавления ваших собственных объявлений:
class Forem::Ability
alias_method :orig_init, :initialize
def initialize(user)
orig_init(user)
# Put your own authorization code here.
end
end
class Ability < Forem::Ability; end
Когда в контексте движка метод can?
должен использовать контроллер / пространство имен движка для авторизации действий (Forem::Ability
), когда в контексте вашего собственного приложения он использует ваш собственный контроллер и нет пространства имен для выполнения то же самое.
Поэтому я думаю, что это решение здесь (которое добавит все действия по авторизации как к Ability
, так и к Forem::Ability
, должно решить вашу проблему.
ОБНОВЛЕНИЕ: теперь я понимаю, что метод current_ability
контроллера двигателя, вероятно, читает что-то вроде:
def current_ability
@current_ability ||= Forem::Ability.new(current_user)
end
А ваш (по умолчанию из камня канкан) выглядит примерно так:
def current_ability
@current_ability ||= Ability.new(current_user)
end
Так что мое решение выше должно исправить вашу проблему, но это, скорее всего, специфическая проблема, с которой он сталкивается.