0

我正在尝试使用 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

无论如何,这总是返回 true。但是,如果我将能力写在一行中:

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。关于为什么这会破坏的任何想法或想法?谢谢

4

1 回答 1

0

if...else部分是一个表达式,如果条件为假,则计算结果为,nil或者,如果条件为真,则计算条件代码的结果。

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

于 2013-02-23T19:24:27.257 回答