我是一个相对新手,我正试图让 cancan 在一个简单的项目中工作。我已经关注 Railscast 并阅读了文档,但我遗漏了一些东西。
我有两个问题。
- 我为普通用户正确隐藏了编辑/创建链接。但是,它们也对管理员用户隐藏。
- 如果我注释掉隐藏上述链接的代码,当管理员用户单击它们时,他们会收到一条访问被拒绝消息,该消息应该显示给非管理员用户
所以我认为我的问题是应用程序没有正确检查能力。我已经检查了数据库,并且角色列正确地填充了该用户的“管理员”。
这是我的用户模型:
class User < ActiveRecord::Base
has_secure_password
#this is for authentication
attr_accessible :email, :password, :password_confirmation, :role
validates_uniqueness_of :email
#end of authentication
end
在我的 Instructors 控制器中,我在顶部添加了“load_and_authorize_resource”。
我的 Ability.rb 文件看起来像这样
class Ability
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
#
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
我根据角色隐藏控件的视图我有以下代码:
<% if can? :manage, Instructor %>
<td><%= link_to 'Edit', edit_instructor_path(instructor) %></td>
<td><%= link_to 'Destroy', instructor, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>
非常感谢所有帮助。
谢谢
斯科特