Ruby on rails 访问主应用程序';s CanCan规则来自Rails 3.1引擎
我正在尝试使用一个gem,它恰好利用了CanCan授权框架以及我的主要应用程序。主应用程序和Rails引擎都有自己的功能.rb文件 当我尝试执行一些授权检查时,布局中出现了问题:Ruby on rails 访问主应用程序';s CanCan规则来自Rails 3.1引擎,ruby-on-rails,ruby,ruby-on-rails-3,cancan,Ruby On Rails,Ruby,Ruby On Rails 3,Cancan,我正在尝试使用一个gem,它恰好利用了CanCan授权框架以及我的主要应用程序。主应用程序和Rails引擎都有自己的功能.rb文件 当我尝试执行一些授权检查时,布局中出现了问题: <% if can? :update, User %> <%= link_to_current_user :content_method => :login %>. <% else %> :登录%>。 当我使用引擎上的布局文件时,它会参考其
<% if can? :update, User %>
<%= link_to_current_user :content_method => :login %>.
<% else %>
:登录%>。
当我使用引擎上的布局文件时,它会参考其自身的ability.rb文件进行授权。当然,我的主应用程序中没有规则,所以授权在不应该的时候失败。我有没有办法强迫它去“主要”的坎坎
谢谢。到目前为止,我找到的唯一方法是将两个文件合并成一个单独的文件,在启动时将其分离为模块和monkey patch这两种功能。不太好。我还是ruby的初学者,但我希望能在以下方面帮助你 更新 另一个要尝试的问题,如上所述,是选择为您的模型加载哪个能力文件 创建您自己的模型:
# in models/admin_ability.rb
class AdminAbility
include CanCan::Ability
def initialize(user)
# define admin abilities here ....
end
end
然后,将其用于您的模型
def current_ability
@current_ability ||= AdminAbility.new(current_user)
end
我希望这个解决方案能解决你的问题
Steph我认为最简单的解决方案是使用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
而您的(cancan gem中的默认值)的内容如下:
def current_ability
@current_ability ||= Forem::Ability.new(current_user)
end
def current_ability
@current_ability ||= Ability.new(current_user)
end
因此,我上面的解决方案应该可以解决您的问题,但这可能是它存在的特定问题。您确定要
can吗?:更新,用户
可能是can?:更新,当前用户
?怀疑你和引擎的能力.rb实际上是一团糟。这不会改变任何事情。可以吗更新,用户是有效的用法。