5

Rails アプリでユーザーに権限を付与したいと考えています。すべての投稿とコメントを作成、更新、および削除できる「管理者」、自分のコメントのみを作成および更新できる「ユーザー」、およびこれらのいずれも実行できない「ゲスト」がいます。このために、gem 'devise' と 'cancancan' を使用します。「devise」gem は理解できますが、「cancancan」は理解できません。

クラスability.rbで、これらのユーザー(管理者、ユーザー、ゲスト)の権限をどのように記述できますか?

4

3 に答える 3

6

Cancancan特定のコンテキストの権限のみを定義できます。このコンテキストは、一部ではないユーザー ロールである可能性があるcancancanため、ロールは自分で定義する必要があります。

ユーザーの役割を定義するにはさまざまな方法があります。

  • Roleモデルとして、
  • Rails列挙型
  • ここで提案されているように、
  • Userモデルの文字列属性として。

それはすべてユースケースに依存します。能力を定義する方法の例は、ここにあります。あなたの場合、次のようになります。

class Ability
  include CanCan::Ability

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

    if user.reviewer? #Just a logged user
      can :manage, Comment, { owner_id: user.id }
    elsif user.admin?
      can :manage, :all
    end
  end
end

class User < ActiveRecord::Base
  enum role: [ :reviewer, :admin ]
end
于 2014-12-08T11:52:12.983 に答える
1

次のレールキャストを参照できますhttp://railscasts.com/episodes/192-authorization-with-cancan

于 2014-12-08T11:48:32.420 に答える