【发布时间】:2016-02-03 13:09:40
【问题描述】:
我无法调试一些 cancancan 代码并寻求帮助。
can :update, Message do |m|
false
end
但奇怪的是cancancan总是返回true,我无法调试问题。这是一小段相关的cancancan代码
rule.rb
def matches_conditions?(action, subject, extra_args)
if
...
elsif @block && !subject_class?(subject)
@block.call(subject, *extra_args)
end
end
我可以看到@block.call 已完成并且它返回 false,但是ability.rb 中的这段代码对我来说没有意义
match = subject.map do |subject|
relevant_rules_for_match(action, subject).detect do |rule|
rule.matches_conditions?(action, subject, extra_args)
end
end.compact.first
match ? match.base_behavior : false
base_behaviour 在初始化后从未设置,并且在初始化时设置为 true,规则的 base_behaviour 将如何返回 false。
辅助函数被调用
ability = Ability.new(user)
ability.can? :update ,@message
【问题讨论】:
-
您在查看
can?(:update, Message)还是can?(:update, @message)? -
每次更改
ability.rb时都必须重新启动服务器。你也可以粘贴代码,你正在使用can?帮助方法。 -
@kddeisz 我已经更新了问题。谢谢
-
@HassanAkram 我已经更新了问题。
-
知道有一个压倒一切的能力。谢谢
标签: ruby-on-rails cancan cancancan