8

Devise と CanCan を使用して Rails アプリケーションを開始しました。記事と 1 対多の関係を持つユーザーがいます。私はCanCanを初めて使用します。これが私がやろうとしていることです:

管理者

  • 記事に対して任意のアクションを実行できます

ログインユーザー

  • 記事を読んだり作成したりできる
  • 自分の記事を編集して破棄できる

ゲストユーザー

  • 記事が読める

しかし、CanCan の構文を理解するのに苦労しています。このようなものになると理解しています。

def initialize(user)
  user ||= User.new
  if user.admin?
    can :manage, Article
  else
    can :read, Article
  end
end

しかし、これは管理者とゲスト ユーザー専用です。ユーザーが空のときに新しいユーザー オブジェクトが作成されるため、ゲスト ユーザーとログイン ユーザーを区別する方法がわかりません。コードがこのようなものであることを見てきましたが、can [:edit, :destroy], Article, :user_id => user.idこれが初期化メソッドにどのように適合するかはわかりません。

最後の質問ですが、can :read, Articleゲストに対してのみ定義すると、読み取りアクションをホワイトリストに登録するなど、作成や更新などの他のアクションがブロックされますか?

どんな助けでも大歓迎です。どうもありがとう!

4

2 に答える 2

22

これが私がしたことです:

能力.rbで

def initialize(user)
  if user.nil?
    can :read, Article
  elsif user.admin?
    can :manage, Article
  else
    can [:read, :create], Article
    can [:update, :destroy], Article, :user_id => user.id
  end
end

リンクを表示するために、私はこれを使用しました:

- if can? :read, Article
  = link_to 'Show', article
- if can? :create, Article
  = link_to 'New Article', new_article_path
- if can? :update, article
  = link_to 'Edit', edit_article_path(article)
- if can? :destroy, article
  = link_to 'Destroy', article, method: :delete, data: { confirm: 'Are you sure?' }

そして、それが最善の方法であるかどうかはわかりませんが、現在は機能しているようです。

于 2012-08-01T07:25:54.383 に答える
8

条件のハッシュを渡すことができます:

can :manage, Article, :user_id => user.id

詳細については、https://github.com/ryanb/cancan/wiki/defining-abilitiesをご覧ください。

于 2012-08-01T07:25:46.917 に答える