0

我是一个相对新手,我正试图让 cancan 在一个简单的项目中工作。我已经关注 Railscast 并阅读了文档,但我遗漏了一些东西。

我有两个问题。

  1. 我为普通用户正确隐藏了编辑/创建链接。但是,它们也对管理员用户隐藏。
  2. 如果我注释掉隐藏上述链接的代码,当管理员用户单击它们时,他们会收到一条访问被拒绝消息,该消息应该显示给非管理员用户

所以我认为我的问题是应用程序没有正确检查能力。我已经检查了数据库,并且角色列正确地填充了该用户的“管理员”。

这是我的用户模型:

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 %>

非常感谢所有帮助。

谢谢

斯科特

4

2 回答 2

0

我变了:

if user.admin?

if user.id

而且效果很好

于 2012-12-03T04:00:39.640 回答
0

而不是这个

<% if can? :manage, Instructor %>

尝试这个

<% if user.has_role? :admin %>

(假设在您的应用程序中,管理员管理/拥有比教师更多的权限。)

于 2012-12-02T23:51:58.513 回答