好的,所以我正在尝试使用 Devise 和 CanCan 的组合在我的项目中创建一个用户角色系统。我知道这是一个流行的组合,但是在完成了半打半完成的教程之后,我终于得到了一些工作,但仍然有问题。
这是一个描述:用户可以注册,他们可以是管理员、工人或客户。他们选择的选项按原样保存到数据库中,但是当我尝试在 CanCan 中使用这些选项时出现问题。这是我的代码,所以你可以看到我到目前为止:
用户.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
角色.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
项目.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并确保我的代码是相同的,尽管改变了用户角色,但我一直收到同样的错误:
我load_and_authorize_resource
在我的项目控制器和我的项目视图中有:
<% if can? :edit, @project %>
<td><%= link_to 'Edit', edit_project_path(project) %></td>
<% end %>
现在什么都没有。这有点紧急,而且我在 Rails 方面的经验并不多,所以我将非常感谢你们中的任何人提供的任何帮助或建议。如果您需要查看我的更多代码或想描述更多我想要完成的工作,请告诉我。谢谢!