0

デバイステーブルUserを変更して、クリアランス列を作成しました。この列は、ユーザーの権限(読み取り、読み取り/書き込み、フルコントロール)を表す番号(1〜3)です。私が読んでいるすべての例とは異なり、私のクリアランス(例の役割)は、関係を持つ別個のテーブルではなく、デバイステーブル(ユーザー)の独自の列です。デフォルト値は1です。

私のability.rbは次のようになります:

 class Ability
 include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.clearance.equal?("2")
      can :create, Post
      can :manage, Post, :user_id => user.id
    else
      can :read, :all
    end
  end

end

クリアランス値が2のユーザーが投稿を作成し、自分の投稿。また、1と3のコードをまだ記述していないため、他のすべてのクリアランス番号ですべてを読み取ることができることも含めました。

ただし、Cancanは、私のユーザー(確認済みのクリアランスレベル2)が「else」条項に該当すると考えているため、投稿を読むことしかできません。新しいメッセージを作成しようとすると、このページのメッセージにアクセスする権限がありません。道に迷いました。ヘルプ?

4

1 に答える 1

1

これは、クリアランス列が整数である可能性がありますか?そのような場合、あなたはあなたが書いたようuser.clearance == 2にではなく、あなたが書くべきです。

于 2012-07-29T19:32:52.667 に答える