CANCAN未定义的方法`user_type?' for“admin”:String

时间:2011-05-13 09:34:50

标签: ruby-on-rails authorization gem cancan

这是我的问题:

我正在使用cancan gem。我认为一切都很好,除了一件事,产生undefined method 'user_type?' for "admin":String

这是我的能力.rb

class Ability
  include CanCan::Ability
  def initialize(user)
       user ||= User.new # guest user
       if user.user_type? :admin
         can :manage, :all
       # [code code code code commented to find more easily the problem]
        else
          can :read, :all
        end
  end
end

我的user.rb

require 'digest/sha2'

class User < ActiveRecord::Base
  #definisco i ruoli
  ROLES = %w[admin client banned]
  default_scope :order => 'user' [...]

我无法弄清楚我要修改的内容。为什么if user.user_type? :admin不检查当前用户属性?非常感谢您的关注!

UP:好的,我读过应用程序控制器中声明的cancan need方法“current_user”。现在我努力了。新闻,很快。

1 个答案:

答案 0 :(得分:1)

你应该这样做。我认为这是更好的方法。

将角色种子放入DB。

在应用程序助手中粘贴此代码。

def is_admin?(user)
  admin_role = Role.find(:first, :conditions => ["name = ?", "admin"])
  return user.roles.include?(admin_role)
end

然后在能力调用中

            class Ability
             include CanCan::Ability
             def initialize(user)
               user ||= User.new # guest user
                 if is_admin?(user)
                   can :manage, :all
                    # [code code code code commented to find more easily the problem]
                 else
                   can :read, :all
                 end
             end
           end

它会正常工作.......