我无法调试一些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_behavi如何返回false。
辅助函数称为
ability = Ability.new(user)
ability.can? :update ,@message
答案 0 :(得分:0)
知道有一个压倒一切的能力