Ruby on rails 应用程序未将用户重新命名为管理员

Ruby on rails 应用程序未将用户重新命名为管理员,ruby-on-rails,Ruby On Rails,我已经创建了用户角色,但是我的应用程序没有发现我的帐户是管理员。它将角色显示为admin,但admin也为nil 从rails控制台: 2.0.0-p0 :001 > user = User.find(13) User Load (17.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 13 LIMIT 1 => #<User id: 13, admin: nil, role: "admin", roles_

我已经创建了用户角色,但是我的应用程序没有发现我的帐户是管理员。它将角色显示为admin,但admin也为nil

从rails控制台:

2.0.0-p0 :001 > user = User.find(13)
  User Load (17.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 13 LIMIT 1
 => #<User id: 13, admin: nil, role: "admin", roles_mask: nil> 
2.0.0-p0 :002 > user.roles
 => [] 
2.0.0-p0 :003 > user.role?(:admin)
 => false 
如果它理解用户角色是admin,为什么它不接受它作为admin并给帐户适当的权限?我需要解决这个问题,因为我试图只允许管理员修改所有配置文件,然后指定普通用户只能修改和访问他们自己的配置文件

user.rb:

   class User < ActiveRecord::Base
  has_secure_password
  attr_accessible :password_confirmation, :about_me, :feet, :inches, :password, :birthday, :career, :children, :education, :email, :ethnicity, :gender, :height, :name, :password_digest, :politics, :religion, :sexuality, :user_drink, :user_smoke, :username, :zip_code
  validates_uniqueness_of :email
  validates_presence_of :password, :on => :create
  before_create { generate_token(:auth_token) }

  def send_password_reset
    generate_token(:password_reset_token)
    self.password_reset_sent_at = Time.zone.now
    save!
    UserMailer.password_reset(self).deliver
  end

  def generate_token(column)
    begin
      self[column] = SecureRandom.urlsafe_base64
    end while User.exists?(column => self[column])
  end
end

正如我在评论中所说

user.role
=> admin
因此,您可以向应用程序控制器添加如下内容:

def admin
  unless current_user.role == 'admin'
    flash[:error] = "Authorisation is required to access this content."
    redirect_to current_user
  end
end
通过这种方式,您可以阻止非管理员用户访问控制器中的某些操作:

before_filter :admin, :only => [:destroy]
这只是一个示例,可以为您提供一些指导,我假设您有当前的用户助手


我希望这会有所帮助……

user.roles返回[]是否有错?是的,我不知道为什么返回括号。用户是否属于多个角色?返回什么“user.role”?=>管理员:那为什么要担心角色面具呢?如果您正在使用cancan,我假设您正在使用,因为角色掩码代码直接来自wiki,您可以通过创建admin布尔属性并使用user.admin检查来定义您的能力?或遵循建议。