1

さて、Devise と CanCan の組み合わせを使用して、プロジェクトにユーザー ロール システムを作成しようとしています。これが人気のある組み合わせであることは知っていますが、半ダースの半分完了したチュートリアルを実行した後、最終的に何かが機能するようになりましたが、まだ問題があります.

説明は次のとおりです。ユーザーは登録でき、管理者、ワーカー、またはクライアントのいずれかになります。彼らが選択したオプションはデータベースに保存されますが、CanCan でこれらのオプションを使用しようとすると問題が発生します。これが私のコードです。これまでの内容を確認できます。

user.rb

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, 
                  :subdomain, :first_name, :last_name

  validates_presence_of :email
  validates_uniqueness_of :email, :case_sensitive => false

  ROLES = %w[admin worker client]

  def role?(role)
    roles.include? role.to_s
  end
end

role.rb

class Role < ActiveRecord::Base
  has_many :assignments
  has_many :users, :through => :assignments
end

割り当て.rb

class Assignment < ActiveRecord::Base
  belongs_to :user
  belongs_to :role
end

能力.rb(これはCanCan用です)

class Ability
  include CanCan::Ability

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

    if user.role? :admin
      can :manage, :all
    else
      can :read, :all
    end

    if user.role?(:worker)
      can :create, Project
      can :update, Project do |project|
        project.try(:user) == user
      end
    end
  end
end

project.rb

class Project < ActiveRecord::Base
    has_many :lists, :dependent => :destroy
    has_many :messages, :dependent => :destroy
    belongs_to :user

    attr_accessible :title, :description
    validates :title,           :presence => true,
                                :length => { :minimum => 5 }
end

それらはすべて私のモデルです。ここのチュートリアルに従いました: http://railscasts.com/episodes/192-authorization-with-cancanそして、ユーザーの役割を変更してもコードが同じであることを確認しましたが、同じエラーが発生し続けます:

CanCanでのRailsエラー

load_and_authorize_resourceプロジェクトコントローラーとプロジェクトビューに次のものがあります。

<% if can? :edit, @project %>
    <td><%= link_to 'Edit', edit_project_path(project) %></td>
<% end %>

現在何も機能していません。これは緊急のことであり、私は Rails の経験が豊富ではないため、どなたかの助けや提案があれば非常に感謝しています。私のコードをさらに見る必要がある場合、または私が達成しようとしていることをさらに説明したい場合はお知らせください。ありがとう!

4

1 に答える 1

2

ユーザーとロールの関係がありません:)

あなたのuser.rbで

has_many :assignments
has_many :roles, :through => :assignments

そして、user.rolesが定義されます;)

于 2012-12-11T02:54:42.530 に答える