我是一个相对新手,我正试图让cancan在一个简单的项目中工作。我跟着Railscast并阅读了文档,但我遗漏了一些东西。
我遇到了两个问题。
所以我认为我的问题是应用程序没有正确检查功能。我检查了数据库,并为该用户正确填充了“admin”角色列。
这是我的用户模型:
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 %>
非常感谢所有帮助。
由于
斯科特
答案 0 :(得分:0)
而不是这个
<% if can? :manage, Instructor %>
试试这个
<% if user.has_role? :admin %>
(假设在您的应用中,管理员管理/拥有比教师更多的权利。)
答案 1 :(得分:0)
我改变了:
if user.admin?
到
if user.id
它完美无缺