cancan rails代码理解

时间:2016-02-03 13:09:41

标签: ruby-on-rails cancan cancancan

我无法调试一些cancancan代码并寻求帮助。

can :update, Message do |m|
  false
end

但奇怪的是,cancancan总能返回true,我无法调试问题。这是一小段相关的can​​cancan代码

   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

1 个答案:

答案 0 :(得分:0)

知道有一个压倒一切的能力