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

これが常に真を返していることに関係なく。ただし、能力を1行で書くと、次のようになります。

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パーミッションが1行を使用する場合、期待どおりに機能します。ブロックを使用すると、常にtrueが返されます。なぜこれが壊れているのかについてのアイデアや考えはありますか?ありがとう

4

1 に答える 1

0

if...else部分は式であり、nil条件がfalseの場合は、、条件がtrueの場合は、条件コードが評価するものに評価されます。

あなたの場合、複数行ifで、!group.nil?trueの場合、is_a_group_member(current_user_group_member) == trueが返されます。user.admin?trueの場合、がis_a_user_admin(current_user)返されます。したがって、それらのいずれかが真の場合、trueが返されます。

于 2013-02-23T19:24:27.257 に答える