检查康康的能力

时间:2012-12-02 17:46:20

标签: ruby-on-rails-3.2 authorization cancan

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

我遇到了两个问题。

  1. 我为一般用户正确隐藏了编辑/创建链接。但是,它们也是管理员用户隐藏的。
  2. 如果我注释掉隐藏上述链接的代码,当管理员用户点击它们时,会收到一条应该为非管理员用户显示的“拒绝访问”消息
  3. 所以我认为我的问题是应用程序没有正确检查功能。我检查了数据库,并为该用户正确填充了“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 %>
    

    非常感谢所有帮助。

    由于

    斯科特

2 个答案:

答案 0 :(得分:0)

而不是这个

<% if can? :manage, Instructor %>

试试这个

<% if user.has_role? :admin %>

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

答案 1 :(得分:0)

我改变了:

if user.admin?

if user.id

它完美无缺