2

RoR で CanCan をセットアップしましたが、次の場合に正常に動作します。

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new

    can :read, List, :user_id => user.id

  end
end

私がしたいのは、user_id が一致するか、アクセス レベルが「public」である「または」条件を指定することです。

can :read, List, (:user_id => user.id || :access => 'public')

しかし、それはもちろんうまくいきません。

4

2 に答える 2

6

完全を期すために、ブロックの使用に加えて、複数の能力も定義します。

can :read, List, user_id: user.id
can :read, List, access: 'public'

これについては、メインのDefining Abilities ドキュメント ページで説明されています。

私はどちらを好むかについてやや曖昧です。orブロックは、(a) 能力がed であること、(b) 累積的であること、(c) 順序に依存していることを知ることに依存していないため、よりコミュニケーションがとれると思います。

于 2013-05-26T01:01:05.160 に答える
4

ドキュメントに記載されているように、ブロックを使用できます。

can :read, List do |l|
  l.user_id == user.id || l.access == 'public'
end
于 2013-05-26T00:57:43.993 に答える