Ruby on rails 为什么块中定义的CanCan总是返回true?
我试着用CanCan来定义一个区块中的能力。在ability.rb中,我的权限定义为:Ruby on rails 为什么块中定义的CanCan总是返回true?,ruby-on-rails,ruby-on-rails-3,cancan,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 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。你有什么想法或想法来解释为什么会这样吗?谢谢如果
else
部分是一个表达式,如果条件为false,则计算结果为nil
,如果条件为true,则计算结果为条件代码计算结果的任何值
在您的情况下,在多行
if
,if!group.nil?
为true,为组成员(当前用户组成员)==true
返回。如果user.admin?
为true,则返回为\u用户\u管理员(当前用户)
。因此,如果其中任何一个为true,则将返回true
。gem的文档中明确说明,您应仅在资源本身的条件下使用块仅当存在实际实例对象时才计算块。在检查类的权限时(例如在索引操作中),不会对其进行计算。这意味着任何不依赖于对象属性的条件都应移到块之外代码>