为什么块中定义的CanCan总是返回true?

时间:2013-02-23 19:07:07

标签: ruby-on-rails ruby-on-rails-3 cancan

我正在尝试使用CanCan来定义块中的能力。在ability.rb中,我将权限定义为:

can [:create, :show], Comment do |comment|
  if !group.nil?
      is_a_group_member(current_user_group_member) == true
  elsif user.admin?
    is_a_user_admin(current_user)
  end
end

无论什么,这总是回归真实。但是,如果我在一行中写下这个能力:

can [:create, :show], Comment if (!group.nil? && is_a_group_member(current_user_group_member) == true) || (user.admin? && is_a_user_admin(current_user))

当ability.rb权限使用一行时,它按预期工作。当我使用一个块时,它总是返回true。关于为什么会破坏的任何想法或想法?感谢

1 个答案:

答案 0 :(得分:0)

if ... else部分是一个表达式,如果条件为假,则评估为nil,如果条件为真,则评估为条件代码评估为。

在您的情况下,在多行if中,如果!group.nil?为真,则返回is_a_group_member(current_user_group_member) == true。如果user.admin?为真,则返回is_a_user_admin(current_user)。因此,如果其中任何一个为真,则返回true